2011-11-22 6 views
7

Ho una cartella nella mia casella personale con 30.000 file, che non posso eliminare utilizzando l'interfaccia web. Sembra che devo scaricare tutti i 30.000 file per dire a Dropbox che davvero non li voglio.Utilizzo dell'interfaccia Web di Dropbox per eliminare una cartella con 30.000 file

Questo errore è sorto perché la macchina che aveva in origine i file è scomparsa e stavo utilizzando la sincronizzazione selettiva per evitare di scaricare 30.000 file in tutti gli altri computer.

Qualcuno può pensare a un modo intelligente per aggirare questo problema? Solitamente la visualizzazione della cartella causa l'arresto anomalo dell'interfaccia web.

+0

Qual è la dimensione totale dei 30.000 file? – Flukey

+0

@Flukey: forse da 500mb a 1 GB. Sono piuttosto piccoli. – Zach

+0

Ho risolto questo problema risucchiandolo e aspettando 12 ore che i file vengano scaricati su un'altra macchina. Poi li ho cancellati e ora le cose sono peachy. – Zach

risposta

8

L'unico modo per eliminare più di 30.000 file in una cartella è scaricarli utilizzando la sincronizzazione selettiva. L'interfaccia web darà l'errore "Troppi file per favore usa l'applicazione desktop". È automatico, quindi l'unica cosa che serve è il tempo (e abbastanza spazio sul disco rigido). Se non si dispone di spazio sufficiente, collegare un'unità esterna e reimpostare la directory Dropbox lì, lasciarla scaricare, quindi eliminare.

Questo è un problema stupido, lo so. Vorrei poterti gestire di più tramite l'interfaccia web poiché questa è la posizione centrale per i tuoi file.

+1

Non potevo credere che sia il 2015 !! Ancora ottimi prodotti mancano di caratteristiche meno evidenti ma di base. – nehemiah

+0

@itsneo È il 2015 e le "funzionalità" devono ancora essere programmate una per una in ogni applicazione che scriviamo. Da qualche parte manca un passo importante nell'evoluzione della programmazione. Solo i miei due centesimi. – masterxilo

+0

Triste però, come ha sottolineato Jason "L'interfaccia web è la posizione centrale per tutti i file" per cui Dropbox dovrebbe mettere più soldi e talento.Ma so che quando DB ha dato il via all'opinione è stato diverso, ma è caduto nel tempo e nella crescita di questo prodotto popolare. – nehemiah

1

So che questo è (un po ') in ritardo, ma per chiunque altro si imbatte in questa domanda e ha lo stesso problema ... Il mio problema è in particolare che ho centinaia di concerti di file non più necessari solo su i server Dropbox e non voglio pulire un HDD solo per poterli eliminare con la sincronizzazione selettiva.

L'eliminazione di molti file non è possibile dall'interfaccia web, ma se non vi dispiace immergervi nello Dropbox API, questo può essere automatizzato e non dovrete usare la vostra memoria (l'ho fatto sotto con il Python SDK, ma ci sono altre opzioni di lingua). Il limite di file si applica ancora, ma il numero di file in ogni directory può essere conteggiato per determinare il modo corretto di eliminarli senza incorrere nel problema. Ad esempio:

Il seguente script utilizza la chiave API Dropbox univoca e un elenco di directory Dropbox (deleteDirList) come input. Quindi scorre in ogni sottodirectory di ogni elemento di deleteDirList per determinare se ci sono pochi file sufficienti per poter eliminare la directory senza superare il limite (ho impostato il limite su un file conservativo (?) 10.000); se ci sono troppi file, cancella i file individualmente fino a quando il conteggio è inferiore al limite. Dovrai installare il pacchetto Python dropbox (Io uso Anaconda, quindi conda install dropbox)

Tenere a mente questo è un approccio a forza bruta; ogni sottodirectory viene cancellata una alla volta, il che potrebbe richiedere molto tempo. Un metodo migliore sarebbe quello di contare i file in ciascuna sottodirectory, quindi determinare la directory di livello più alto che può essere eliminata senza superare il limite, ma sfortunatamente non ho il tempo di implementarla al momento.

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))