私はこれが少し遅れたと知っていますが、この質問に遭遇して同じ問題を抱えている他の誰かのために...私の問題は、何百ものギグに、 Dropboxサーバーと私は、単に選択的な同期でそれらを削除できるようにHDDをきれいにしたくありません。
ウェブインターフェイスからまだ多くのファイルを削除することはできませんが、Dropbox APIにダイビングしても構わない場合は、少なくとも自動化が可能で、独自のストレージを使用する必要はありません下にはPython SDKがありますが、その他の言語オプションもあります)。ファイルの制限は引き続き適用されますが、各ディレクトリのファイル数を数えて、問題を実行しないで削除する適切な方法を判断することができます。同様に:
次のスクリプトは、独自のDropbox APIキーとDropboxディレクトリのリスト(deleteDirList
)を入力として受け取ります。次に、deleteDirList
の各要素の各サブディレクトリをループして、制限を超えずにディレクトリを削除できる十分なファイルがないかどうかを判断します(これは控えめな(?)10,000ファイルに制限を設定します)。ファイル数が多すぎると、カウントが制限値を下回るまでファイルを個別に削除します。 Pythonパッケージdropbox
をインストールする必要があります(私はAnacondaを使用していますので、conda install dropbox
)
これはブルートフォースアプローチです。各サブディレクトリが1つずつ削除され、長い時間がかかる可能性があります。より良い方法は、各サブディレクトリ内のファイルを数え、制限を打ち切ることなく削除できる最上位のディレクトリを決定することですが、残念ながら現時点で実装する時間はありません。
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))
合計30,000ファイルのサイズは? – Flukey
@Flukey:おそらく500MBから1GBです。彼らはかなり小さいです。 – Zach
私はそれを吸い取って、ファイルがすべて別のマシンにダウンロードされるのを12時間待って解決しました。その後、私はそれらを削除し、物事は今peachyです。 – Zach