Удаление огромного количества файлов в корне - PullRequest
2 голосов
/ 26 июня 2019

По ошибке я сохранил огромное количество файлов в корне моего google-накопителя (> 100 тыс. Файлов).Я не могу удалить их онлайн легко.

В настоящее время я пытаюсь удалить их, используя file list api и file delete api , это работает, но этоочень медленно.

Также я не нашел способа подсчитать, сколько файлов осталось в корне, чтобы оценить, сколько времени это займет.

У кого-нибудь есть более быстрый способ удаленияфайлы или способ их подсчета?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Google Drive REST API предоставляет пакетный метод для одновременного выполнения нескольких запросов и выполнения быстрее, чем выполнение ваших запросов по одному.Вы можете увидеть полную ссылку для выполнения пакетных запросов здесь , включая фрагменты кода для поддерживаемых языков.Вы можете использовать приведенный ниже фрагмент кода Python, чтобы сделать запрос на пакетное удаление в Drive REST API:

listOfFileIDs = [] 

def callback(request_id, response, exception):
    if not exception:
        print(response)
    else:
        print(exception)

batch = vals.service.new_batch_http_request(callback = callback)

for file_id in listOfFileIDs:
    batch.add(vals.service.files().delete(fileId = file_id))

print(batch.execute())

Вам необходимо заполнить listOfFileIDs, сделав запрос Files: list, чтобы получить список идентификаторовфайлы, которые вы хотите удалить.

Вещи для запоминания :

  • Вы можете сделать до 100 вызовов в пакете, так что вам все равно придется делать несколькоПакетные запросы к серверу
  • listOfFileIDs также могут иметь длину не более 100 из-за этого ограничения партии
  • Пакетные запросы выполняются быстрее и используют меньше вашей квоты, чем отдельные запросы

Вы можете отслеживать запросы вашего проекта на консоли разработчика .Квота приложения имеет вежливый лимит в 1000 запросов на 100 секунд на пользователя, а также несколько других лимитов квот, которые вы можете увидеть на вкладке квот для вашего приложения .Вам также может понадобиться снизить частоту запросов, используя Экспоненциальный откат , если вы продолжаете получать 403: Rate limit exceeded или 403: User rate limit exceeded.

0 голосов
/ 26 июня 2019

Вероятно, это будет ваш единственный вариант.Да, API медленный, но это бесплатный API, за который вы не платите.

Я бы сначала сделал file.list с параметром aq чего-то подобного

'root' in parents and mimeType != 'application/vnd.google-apps.folder'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...