Как удалить файл из корзины на диске в colab

Я использую Google Drive в Colab. В основном я делаю следующее:

from google.colab import drive
drive.mount('/content/gdrive')

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

Я пытался найти файл в корзине, но каталог корзины ничего не показывает os.listdir('/content/gdrive/.Trash') также я вижу файлы там в веб-интерфейсе.

Как я могу удалить файл из корзины?

5 ответов

Это действие просто выполнить в Google Colab с помощью модуля pydrive. Чтобы удалить все файлы из корзины Google Диска, введите в записную книжку Google Colab следующие строки:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
my_drive = GoogleDrive(gauth)

После ввода кода аутентификации и создания действительного экземпляра класса Google Drive напишите:

for a_file in my_drive.ListFile({'q': "trashed = true"}).GetList():
    # print the name of the file being deleted.
    print(f'the file "{a_file['title']}", is about to get deleted permanently.')
    # delete the file permanently.
    a_file.Delete()

Если вы хотите удалить определенный файл из корзины, вам нужно изменить последний фрагмент кода. Предположим, у вас есть файл с именемweights-improvement-01-10.5336.hdf5 в вашей корзине:

for a_file in my_drive.ListFile({'q': "title = 'weights-improvement-01-10.5336.hdf5' and trashed=true"}).GetList():
    # print the name of the file being deleted.
    print(f'the file "{a_file['title']}", is about to get deleted permanently.')    
    # delete the file permanently.
    a_file.Delete()

Если вы хотите сделать другие и, возможно, более сложные запросы, например, удалите группу файлов, которые имеют выражение weights-improvement-общие в своих именах или файлы, все из которых были изменены до заданной даты; посетить: 1) Получить все файлы, соответствующие запросу, 2) Искать файлы и папки.

Ответ Джесс об использовании Google Drive API для очистки корзины не является хорошим способом, потому что у вас могут быть другие данные в корзине

Поскольку при удалении файлы перемещаются в корзину, этот хитрый трюк уменьшает размер файла до 0 перед удалением (отменить нельзя!)


import os

delete_filepath = 'drive/My Drive/Colab Notebooks/somefolder/examplefile.png'

open(delete_filename, 'w').close() #overwrite and make the file blank instead - ref: https://stackru.com/a/4914288/3553367
os.remove(delete_filename) #delete the blank file from google drive will move the file to bin instead

Также ответил на: /questions/50093063/kak-udalit-navsegda-iz-podklyuchennoj-papki-drive/55031875#55031875

Если вы ищете код для удаления файла из корзины, вы можете проверить это SO сообщение, на которое ответил Tanaike - Empty Google Drive Trash:

def main():
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())     
    service = discovery.build('drive', 'v3', http=http)
    service.files().emptyTrash().execute()

или используйте эти методы, используя Pydrive:

file.Trash() - Move file to trash
file.Untrash() - Move file out of trash
file.Delete() - Permanently delete the file

Мы можем успешно запустить эти коды в google colab:

      from google.colab import drive
drive.mount('/root/gdrive', force_remount=True)

from google.colab import auth
auth.authenticate_user()
from googleapiclient.discovery import build
drive_service = build('drive', 'v3')
drive_service.files().emptyTrash().execute()

но если в мусорной корзине Google Диска много файлов, нам все равно нужно ждать более 20 минут, грустно.

Команда rclone дает немедленный эффект:

      !curl https://rclone.org/install.sh | bash
!rclone config    # to set google drive client id etc

#delete all files in trash and don't put them in trash again:
!rclone --config /root/sing/rclone.conf delete gdrive: --drive-trashed-only --drive-use-trash=false
!rclone --config /root/sing/rclone.conf ls gdrive: --drive-trashed-only --fast-list

Самый простой способ безвозвратно удалить файлы для гугл диска — это команда. Вы можете удалить определенный файл, используяrm:

      !rm /content/drive/MyDrive/somefolder/examplefile.png

Или вы можете удалить всю папку:

      !rm -r /content/drive/MyDrive/somefolder

Или вы можете использовать подстановочные знаки для удаления файлов с определенными шаблонами:

      !rm /content/drive/MyDrive/somefolder/*.png

Однако, если вы хотите удалить файлы из корзины, вы должны использовать API Google Диска.

Другие вопросы по тегам