2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

Eliminazione di massa dei file in Windows

Ho una directory che contiene ~ 3 milioni di file in alcune sottodirectory su un server Windows 2008. Cancellare manualmente i file tramite SHIFT+DEL sulla directory principale richiede secoli. C'è un altro modo per fare l'eliminazione in modo più veloce?

Risposte (14)

180
180
180
2011-05-27 11:27:41 +0000

AVVERTENZA: se avete collegamenti simbolici alle directory allora del cancellerà le directory vere e proprie e non i collegamenti simbolici. Fate molta attenzione e non eseguite questi comandi a meno che non sappiate che non ci sono collegamenti simbolici all'interno della directory di destinazione.


Ho regolarmente bisogno di cancellare molti file e directory da un disco criptato di WinXP, tipicamente circa 22 GB di 500.000 file in 45.000 cartelle.

Cancellare con Windows Explorer è una schifezza, perché perde un sacco di tempo ad enumerare i file. Di solito sposto la roba che devo cancellare in C:\stufftodelete e ho un file batch deletestuff.bat a rmdir /s/q C:\stufftodelete. Questo è programmato per essere eseguito di notte, ma a volte ho bisogno di eseguirlo durante il giorno, quindi più veloce è meglio è.

Ecco i risultati di un rapido test di tempo di un piccolo campione di 5,85 MB di 960 file in 303 cartelle. Ho eseguito il metodo 1 seguito dal metodo 2, poi ho resettato le directory di prova.

Il metodo 1 rimuove i file e la struttura delle cartelle in un solo passaggio:

rmdir /s/q foldername

Il metodo 2 ha un primo passaggio per cancellare i file e gli output a nul per evitare l'overhead di scrivere sullo schermo per ogni singolo file. Un secondo passaggio poi ripulisce la struttura della directory rimanente:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Metodo 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: media 14.98 secondi
  • Metodo 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: media 12.82 secondi

Ecco i risultati di un altro test utilizzando 404 MB di 19.521 file in 3.243 cartelle:

  • Metodo 1: 2 minuti 20 secondi
  • Metodo 2: 2 minuti 33 secondi

Quindi non c'è molto, probabilmente troppo vicino per giudicare su un singolo test.


Modifica: Ho ritestato con molti più dati, questo è un caso tipico per me: 28,3 GB di 1.159.211 file in 146.918 cartelle:

  • Metodo 1: 2h 15m, 2h 34m: media: 2 ore 25 minuti
  • Metodo 2: 49m, 57m: media: 53 minuti

Wow, il metodo 2 è quasi tre volte più veloce del metodo 1! Aggiornerò il mio deletestuff.bat!

18
18
18
2011-10-31 06:37:53 +0000

Se dovete cancellare regolarmente grandi alberi di directory, considerate di memorizzare la radice di quell'albero di directory su una partizione separata, poi semplicemente formattatela velocemente ogni volta che dovete cancellare tutto. Se avete bisogno di automatizzare questa operazione, potete usare questo comando DOS:

echo Y | format Z: /FS:NTFS /X /Q

dove Z: è la vostra partizione ‘volatile’. Nota: la partizione non deve avere alcuna etichetta. Ne ho parlato nel blog qui .

9
9
9
2009-08-07 07:07:04 +0000

Nel prompt dei comandi (Start -> Run -> cmd):

del /f /s /q foldername
7
7
7
2011-05-25 14:00:51 +0000

Oltre a copiare/spostare i file molto velocemente (usando le proprie API), TeraCopy può cancellare i file ed è anche molto veloce. Da quando ho scoperto TeraCopy non uso un computer senza che sia installato (se devo copiare/spostare/cancellare).

Lo stesso installatore installa l'edizione x64 ma per usarla bisogna forzarla manualmente.

La beta che consiglio rispetto alle versioni stabili: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
6
6
2012-02-09 17:35:24 +0000

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, una, cerca di eliminare i file. E il secondo è cercare di prendere la proprietà dei file. y dovrebbe essere cambiato secondo il vostro locale (sta per sì in inglese). Se fallisce il compito (per esempio se fallisce a causa dell'autorizzazione) allora dovete eseguirlo di nuovo. Tuttavia, il secondo giro non proverà a cancellare i file cancellati nel primo giro, quindi potrebbe essere abbastanza veloce.


Come usarlo. Salvate come delfolder.bat in un percorso (per esempio c:\windows), poi eseguitelo come

delfolder "foldername"

dove foldername è il nome della cartella

Nel mio test, cancellare 123'000 file ha richiesto 3 minuti (sata 7200rpm). EVVIVA!

4
4
4
2011-12-23 15:47:15 +0000

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
3
3
3
2009-08-07 07:09:35 +0000

Usate il comando rd /s dal prompt dei comandi.

2
2
2
2009-10-06 21:59:15 +0000

La migliore soluzione pratica è probabilmente quella di spostare la cartella da qualche parte (ad esempio il Cestino) e poi iniziare a cancellarla. Ci vorranno secoli, ma almeno sarà fuori dai piedi.

Sono abbastanza sicuro che il tempo richiesto per cancellare tutti quei file sia un requisito intrinseco del compito, non un'inefficienza nell'implementazione della cancellazione.

1
1
1
2009-10-06 23:45:48 +0000

Installate Cygwin e usate rm -r. Ma è probabile che questo sia eccessivo.

1
1
1
2011-05-31 12:40:36 +0000

Avete abilitato la generazione di nomi di file brevi? Se sì, ne hai davvero bisogno? La rimozione di un file è solo un'operazione di metadati. Quindi se hai il doppio dei nomi da rimuovere, la quantità di lavoro è significativamente più alta.

0
0
0
2017-12-13 19:46:11 +0000

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

Riguardo al file BAT di Magallanes , fai molta attenzione con takeown e icacls, perché gli hardlink condividono gli stessi permessi e proprietari, quindi se ci sono hardlink insaturi nella cartella che vuoi rimuovere, usando takeown e icacls cambierai permessi e proprietari dei file fuori dalla cartella.

Usando lo strumento ln.exe puoi elencare tutti i file collegati alla cartella e sapere se sono collegati a file esterni alla cartella (hardlink insaturi):

ln.exe --enum foldername > HardlinksList.txt
0
0
0
2010-04-03 16:30:58 +0000

Hai provato una di queste due applicazioni?

Assicurati di impostare il numero di sovrascritture a 0 se vuoi le prestazioni migliori. Fallo cliccando su opzioni e poi cambia il valore in fondo alla finestra di dialogo.

Inserisci il percorso da cancellare nel campo Source e poi clicca su Delete.

Queste applicazioni non mettono i file nel cestino. Usare con cautela.

0
0
0
2017-06-15 12:00:52 +0000

Questo è fornito per completare e aumentare i passi fatti nelle risposte precedentemente menzionate.

I due metodi sopra citati sembrano abbastanza efficaci, ma determinare le prestazioni sarebbe difficile a meno che non siano messi a confronto con le stesse identiche condizioni:

  • Dispositivo e modello fisico del disco rigido
  • Preferibilmente, ATTO/ Crystal Disk con benchmark prima di clonare i dati su di essi
  • Stessa partizione/posizione del volume e geometria
  • Il modo per farlo sarebbe deframmentare le partizioni/cartelle di esempio e clonarle esattamente come sono 2 esattamente gli stessi tipi di disco rigido (dal passo precedente)
  • Poi eseguire le configurazioni tramite file batch e usare Powershell Cmdlet per registrare e misurare le loro prestazioni.

  • Le seguenti sono alcune cartelle di esempio (denominate come dimensione totale) che ho sperimentato ma non sono stato in grado di ottenere prestazioni / risultati conclusivi.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Avrei postato i file di log in uscita, ma credo che la varianza sia enorme a causa delle dimensioni e della distribuzione dei file delle cartelle ecc.

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
-1
-1
-1
2009-08-07 07:13:28 +0000

Cancellare una cartella è più veloce che cancellare più file.

Quindi, se preferisci usare il mouse invece del prompt dei comandi, puoi creare una directory, spostarci i file e cancellarla (con Shift+Del come hai detto tu).