Ho una directory, che contiene ~ 3 milioni di file in alcune sottodirectory su un server Windows 2008. L'eliminazione manuale dei file tramite MAIUSC + CANC sulla directory principale richiede anni. C'è un altro modo per fare la cancellazione in un più veloce modo?
Ho regolarmente bisogno di eliminare molti file e directory da un'unità WinXP crittografata, in genere circa 22 GB di 500.000 file in 45.000 cartelle.
L'eliminazione con Windows Explorer è spazzatura perché spreca un sacco di tempo nell'enumerazione dei file. Solitamente sposto le cose che devo cancellare in C:\stufftodelete e ho un file batch deletestuff.bat su rmdir /s/q C:\stufftodelete
. È programmato per funzionare di notte, ma a volte ho bisogno di eseguirlo durante il giorno, quindi più veloce è e meglio è.
Ecco i risultati di un test Quick Time di un piccolo campione di 5,85 MB di 960 file in 303 cartelle. Ho eseguito il metodo 1 seguito dal metodo 2, quindi reimpostato le directory di test.
Il metodo 1 rimuove i file e la struttura di directory in un solo passaggio:
rmdir /s/q foldername
Metodo 2 ha un primo passaggio per eliminare i file e le uscite su null per evitare il sovraccarico di scrittura sullo schermo per ogni singolo file. Un secondo passaggio ripulisce la struttura della directory rimanente:
del /f/s/q foldername > nul
rmdir /s/q foldername
Ecco i risultati di un altro test utilizzando 404 MB di 19.521 file in 3243 cartelle:
Quindi non c'è molto in esso, probabilmente troppo vicino a giudicare in un singolo test.
Modifica: ho ripeterlo con molti più dati, questo è un caso tipico per me: 28,3 GB di 1.159.211 file in 146.918 cartelle:
Wow, il metodo 2 è quasi tre volte più veloce del metodo 1! Aggiornerò il mio deletestuff.bat!
Se devi eliminare regolarmente grandi alberi di directory, considera la possibilità di archiviare la radice di quell'albero di directory su una partizione separata, quindi semplicemente formattarla rapidamente ogni volta che devi eliminare tutto. Se è necessario automatizzarlo, è possibile utilizzare questo comando DOS:
echo Y | format Z: /FS:NTFS /X /Q
dove Z: è la tua partizione 'volatile'. Nota: la partizione non deve contenere etichette. Ho bloggato su questo qui .
Nel comando Prompt (Start -> Esegui -> cmd
name__):
del /f /s /q foldername
Oltre a copiare/spostare i file molto velocemente (usando la propria API), TeraCopy può cancellare i file ed è anche molto veloce. Da quando ho scoperto TeraCopy non utilizzo un computer senza averlo installato (se sto per copiare/spostare/eliminare).
Lo stesso programma di installazione installa l'edizione x64 ma per utilizzarlo devi forzarlo manualmente.
La beta che consiglio sulle versioni stable: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
Ho fatto un file bat che fa lo stesso.
@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T
fa il lavoro in due fasi, uno, tenta di cancellare i file. E il secondo è provare ad assumere la proprietà dei file. y dovrebbe essere cambiato secondo il tuo locale (sta per sì in inglese). Se l'operazione non viene eseguita correttamente (ad esempio, in caso di esito negativo, a causa dell'autorizzazione), è necessario eseguirlo di nuovo. Tuttavia, il secondo round non tenterà di eliminare i file eliminati nel primo round, quindi potrebbe essere abbastanza veloce.
Come usarlo. Salva come delfolder.bat in un percorso (ad esempio c:\windows), quindi eseguilo come
delfolder "foldername"
dove foldername è il nome della cartella
Nel mio test, l'eliminazione di 123.000 file ha richiesto 3 minuti (sata 7200 rpm). SÌÌ!
Utilizzare il comando rd/s dal comando Prompt.
Usando il codice qui sotto di solito funziona bene per me.
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
La migliore soluzione pratica è probabilmente spostare la cartella da qualche parte (ad esempio il Cestino) e quindi iniziare a eliminarla. Ci vorranno secoli, ma almeno sarà fuori strada.
Sono abbastanza sicuro che il tempo necessario per eliminare tutti questi file è un requisito intrinseco dell'attività, non un'inefficienza nell'implementazione della cancellazione.
Installa Cygwin e usa rm -r . Ma è probabile che sia eccessivo.
Hai attivato la generazione del nome di file brevi? Se è così, ne hai davvero bisogno? La rimozione di un file è solo un'opzione di metadati. Quindi se hai il doppio del numero di nomi da rimuovere, la quantità di lavoro è significativamente più alta.
Hai provato una di queste due app?
Assicurati di impostare il numero di sovrascrivi su 0 se vuoi prestazioni più veloci. Fai questo facendo clic sulle opzioni, quindi modifica il valore nella parte inferiore della finestra di dialogo.
Immettere il percorso da eliminare nel campo Origine e quindi fare clic su Elimina.
Queste app non inseriscono i file nel cestino. Usare con cura.
Questo è fornito per complimentare e aumentare le misure adottate nelle risposte precedentemente citate.
I due metodi sopra indicati sembrano abbastanza efficaci, ma determinare le prestazioni sarebbe difficile a meno che non siano messi a confronto con le stesse identiche condizioni:
Quindi eseguire le configurazioni tramite file batch e utilizzare il Cmdlet di PowerShell per registrare e misurare le loro prestazioni.
Di seguito sono riportate alcune cartelle di esempio (denominate come dimensioni totali) su cui ho sperimentato ma che non sono state in grado di ottenere risultati/risultati definitivi.
r.bat
rmdir /s/q 3.2G
rd.bat
del /f/s/q 3.3G > nul rmdir /s/q 3.3G
PowerShell:
PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt
PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
La risposta di Hugo è la più veloce ma non rimuove i file nascosti o di sistema nel primo passaggio, quindi se vuoi una soluzione più completa usa il parametro/a:
del /f /s /q /a foldername > nul
rmdir /s /q foldername
Informazioni sul file BAT di Magallanes , sii molto attento a takeown e icacls, perché i collegamenti fissi condividono le stesse autorizzazioni e proprietari, quindi se ci sono collegamenti non saturi nella cartella che vuoi rimuovere, usando takeown e icacls cambierà le autorizzazioni e i proprietari dei file al di fuori della cartella.
Utilizzando lo strumento ln.exe è possibile elencare tutti i file collegati all'interno della cartella e sapere se sono collegati a file esterni alla cartella (collegamenti non saturi):
ln.exe --enum foldername > HardlinksList.txt