Использование веб-интерфейса Dropbox для удаления папки с 30 000 файлов

У меня в дропбоксе есть папка с 30 000 файлов, которые я не могу удалить через веб-интерфейс. Похоже, мне нужно загрузить все 30 000 файлов, чтобы сказать Dropbox, что они мне действительно не нужны.

Эта ошибка возникла из-за того, что машина, на которой изначально находились файлы, исчезла, и я использовал выборочную синхронизацию, чтобы избежать загрузки 30 000 файлов на все остальные мои компьютеры.

Может ли кто-нибудь придумать умный способ обойти это? Простой просмотр папки обычно приводит к сбою веб-интерфейса.


person Zach    schedule 22.11.2011    source источник
comment
Каков общий размер 30 000 файлов?   -  person Flukey    schedule 23.11.2011
comment
@Flukey: от 500 МБ до 1 ГБ. Они довольно маленькие.   -  person Zach    schedule 23.11.2011
comment
Я решил это, проглотив его и подождав 12 часов, пока все файлы загрузятся на другую машину. Затем я удалил их, и теперь все в порядке.   -  person Zach    schedule 23.11.2011
comment
Кроме того, это было от 500 МБ до 1 ГБ для самых больших файлов. Я думаю, что общий размер каталога был около 30 или 40 ГБ.   -  person Zach    schedule 25.03.2013


Ответы (2)


Единственный способ удалить более 30 000 файлов в папке — загрузить их с помощью выборочной синхронизации. Веб-интерфейс выдает ошибку «Слишком много файлов, используйте настольное приложение». Это автоматизировано, поэтому требуется только время (и достаточно места на жестком диске). Если у вас недостаточно места, подключите внешний диск и перенаправьте туда каталог Dropbox, дайте ему загрузиться, а затем удалите.

Это глупый вопрос, я знаю. Я бы хотел, чтобы вы могли больше управлять через веб-интерфейс, так как это центральное место для ваших файлов.

person Jason Clemens    schedule 02.01.2015
comment
Не мог поверить, что это 2015 !! Тем не менее в хороших продуктах отсутствуют менее очевидные, но базовые функции. - person nehem; 09.03.2015
comment
@itsneo Сейчас 2015 год, и «функции» все еще нужно программировать одну за другой в каждом приложении, которое мы пишем. Где-то отсутствует какой-то важный шаг в эволюции программирования. Просто мои два цента. - person masterxilo; 27.09.2015
comment
Печально, однако, как указал Джейсон, веб-интерфейс является центральным местом для всех файлов, для которых Dropbox должен вкладывать больше денег и талантов. Но я знаю, что когда DB начиналась, мнение было другим, но со временем и ростом этого популярного продукта оно изменилось. - person nehem; 27.09.2015
comment
Привет из 2018 года. Не удается рекурсивно переместить папку с более чем 10 000 файлов внутри. - person Vlad; 02.08.2018

Я знаю, что это (немного) поздно, но для всех, кто натыкается на этот вопрос и имеет ту же проблему... Моя проблема в том, что у меня есть сотни гигабайт ненужных файлов только на серверах Dropbox и Я не хочу очищать жесткий диск только для того, чтобы удалить его с помощью выборочной синхронизации.

Удалить столько файлов из веб-интерфейса по-прежнему невозможно, но если вы не против углубиться в Dropbox API это можно по крайней мере автоматизировать, и вам не придется использовать собственное хранилище (я сделал это ниже с помощью Python SDK, но есть и другие варианты языка). Ограничение на количество файлов по-прежнему применяется, но количество файлов в каждом каталоге можно подсчитать, чтобы определить правильный способ их удаления, не сталкиваясь с проблемой. Вот так:

Следующий скрипт использует ваш уникальный ключ API Dropbox и список каталогов Dropbox (deleteDirList) в качестве входных данных. Затем он перебирает каждый подкаталог каждого элемента deleteDirList, чтобы определить, достаточно ли файлов, чтобы можно было удалить каталог, не достигая предела (я установил ограничение на консервативное (?) 10 000 файлов); если файлов слишком много, он удаляет файлы по отдельности, пока их количество не станет меньше установленного предела. Вам потребуется установить пакет Python dropbox (я использую Anaconda, поэтому conda install dropbox)

Имейте в виду, что это метод грубой силы; каждый подкаталог удаляется один за другим, что может занять много времени. Лучшим методом было бы подсчитать файлы в каждом подкаталоге, а затем определить каталог самого высокого уровня, который можно удалить, не достигая предела, но, к сожалению, в данный момент у меня нет времени на это.

import dropbox




##### USER INPUT #####

appToken = r'DROPBOX APIv2 TOKEN'
deleteDirList = ['/directoryToDelete1/','/directoryToDelete2/']      # list of Dropbox paths in UNIX format (where Dropbox root is specified as '/') within which all contents will be deleted. The script will go through these one at a time. These need to be separate directories; subdirectories will deleted in the loop and will throw an exception if listed here.

######################




dbx = dropbox.Dropbox(appToken)
modifyLimit = 10000

# Loop through each path in deleteDirList
for deleteStartDir in deleteDirList:
    deleteStartDir = deleteStartDir.lower()

    # Initialize pathList. This is the variable that records all directories down each path tree so that each directory is traversed, files counted, then deleted
    pathList = [deleteStartDir]

    # Deletion loop
    try:
        while 1:

            # Determine if there is a subdirectory in the current directory. If not, set nextDir=False
            nextDir = next((x.path_lower for x in dbx.files_list_folder(pathList[-1]).entries if isinstance(x,dropbox.files.FolderMetadata)),False)

            if not not nextDir:     # if nextDir has a value, append the subdirectory to pathList
                pathList.append(nextDir)
            else:       # otherwise, delete the current directory
                if len(pathList)<=1:        # if this is the root deletion directory (specified in deleteDirList), delete all files and keep folder
                    fileList = [x.path_lower for x in dbx.files_list_folder(pathList[-1]).entries]
                    print('Cannot delete start directory; removing final',len(fileList),'file(s)')
                    for filepath in fileList:
                        dbx.files_delete(filepath)

                    raise EOFError()    # deletion script is complete

                # Count the number of files. If fileCnt>=modifyLimit, remove files until fileCnt<modifyLimit, then delete the remainder of the directory
                fileCnt = len(dbx.files_list_folder(pathList[-1]).entries)
                if fileCnt<modifyLimit:
                    print('Deleting "{path}" and'.format(path=pathList[-1]),fileCnt,'file(s) within\n')
                else:
                    print('Too many files to delete directory. Deleting',fileCnt-(modifyLimit+1),'file(s) to reduce count, then removing',pathList[-1],'\n')
                    fileList = [x.path_lower for x in dbx.files_list_folder(pathList[-1]).entries]
                    for filepath in fileList[-modifyLimit:]:
                        dbx.files_delete(filepath)

                dbx.files_delete(pathList[-1])
                del pathList[-1]

    except EOFError:
        print('Deleted all relevant files and directories from "{}"'.format(deleteStartDir))
person jshrimp29    schedule 01.02.2018