Как удалить файл из корзины на диске в 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 Диска.