2011-11-22 13 views
7

私はドロップボックスに30,000ファイルのフォルダを持っていますが、Webインターフェイスを使用して削除することはできません。私はdropboxに本当にそれらをほしくないと言うために30,000のファイルをすべてダウンロードしなければならないようです。ドロップボックスWebインターフェイスを使用して30,000個のファイルを含むフォルダを削除する

このエラーは、ファイルを元々持っていたマシンがなくなったために発生しました。選択同期を使用して他のすべてのコンピュータに30,000ファイルをダウンロードしないようにしました。

誰もこれを回避する巧妙な方法を考えることができますか?通常はフォルダを表示するだけで、Webインターフェイスがクラッシュします。

+0

合計30,000ファイルのサイズは? – Flukey

+0

@Flukey:おそらく500MBから1GBです。彼らはかなり小さいです。 – Zach

+0

私はそれを吸い取って、ファイルがすべて別のマシンにダウンロードされるのを12時間待って解決しました。その後、私はそれらを削除し、物事は今peachyです。 – Zach

答えて

8

フォルダ内の30,000以上のファイルを削除する唯一の方法は、選択同期を使用してファイルをダウンロードすることです。 Webインターフェイスは、「あまりにも多くのファイルがデスクトップアプリケーションを使用してください」というエラーを表示します。それは自動化されているので、時間がかかります(十分なハードドライブスペース)。十分なスペースがない場合は、外付けドライブを接続し、そこにDropboxディレクトリを再配置し、ダウンロードさせてから削除します。

これは愚かな問題です、私は知っています。私はこれがあなたのファイルの中心的な場所であるので、あなたはWebインターフェイスを介して多くを管理できることを願っています。

+1

2015年だとは信じられませんでした!まだ優れた製品はあまり明白ではないが基本的な機能を欠いている – nehemiah

+0

@itsneo 2015年であり、私たちが書いているすべてのアプリケーションに「フィーチャー」を1つ1つずつプログラムする必要があります。どこかで、プログラミングの進化の大きな一歩が欠落しています。ちょうど私の2セント。 – masterxilo

+0

しかし、悲しいことに、Jason氏はDropboxがより多くのお金と才能を必要とする「Webインターフェイスはすべてのファイルの中心的な場所です」と指摘しました。しかし、DBがいつ始めたのかは分かっていますが、この人気のある製品の時間と成長には違いがありました。 – nehemiah

1

私はこれが少し遅れたと知っていますが、この質問に遭遇して同じ問題を抱えている他の誰かのために...私の問題は、何百ものギグに、 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)) 
関連する問題