Qual è il modo migliore per rimuovere 100.000 file da una directory di Windows


12

Ho avuto un utente con più di 100.000 file in una singola directory. La macchina si blocca e diventa inutilizzabile a lungo mentre Explorer riempie la memoria e la macchina può bloccarsi. Esiste un modo semplice per scaricare directory e contenuti? Abbiamo provato a usare il deltree da riga di comando e questo non è stato molto meglio.

DaveF

Extra -

Abbiamo riscontrato questo problema più volte con lo stesso utente (in realtà client). Un programma crea centinaia di migliaia di file temporanei durante l'esecuzione. Se il programma funziona correttamente, non importa in quanto vengono rimossi rallentando come è finito con questo. Ma ogni tanto muore lasciando il caos dei file. Abbiamo provato ad usare i metodi rmdir e del etc e sono più veloci dell'uso di explorer ma generalmente finiamo con gli stessi problemi. La partizione viene danneggiata, c'è un file bloccato inspiegabile, alcuni file hanno un problema di autorizzazione, che impedisce all'eliminazione di funzionare. Normalmente questi problemi possono essere risolti con un riavvio, ma in questo caso poiché si tratta di un sistema critico non è possibile in fase di produzione. Su Unix puoi semplicemente fare un rm -rf ecc. E questo è veloce e generalmente non ci sono problemi reali.

A proposito: l'applicazione è in fase di modifica, ma questo non entrerà in produzione per un po 'di tempo e ho pensato che questo problema fosse probabilmente interessante per gli altri.

Aggiornamento - poiché abbiamo MKS Nutcracker sul sistema (senza le utility della riga di comando), siamo riusciti a far funzionare il programmatore con un semplice rm. Questo è parecchi ordini più veloce di del / deltree ecc. Trovo strano che non ci sia un'app così semplice prontamente disponibile come uno strumento di amministrazione del sistema Windows standard.


Risposte:


15

Puoi usare rmdir:

rmdir /s /q FOLDERNAME

Bandiere: /ssignifica eliminare in modo ricorsivo, /qè la modalità "silenziosa".


Abbiamo provato questo: aggiungerò altro alla domanda.
David Allan Finch,

questo avrebbe dovuto funzionare per te. Ha funzionato ?
s_ruchit,

si principalmente - ho aggiunto quali problemi abbiamo visto sopra nella domanda. grazie per il tuo commento.
David Allan Finch,

Accetterò questa risposta. Ma esiste una soluzione migliore che consiste nell'utilizzare un semplice stile unix rm ma poiché questo non è disponibile per la maggior parte degli utenti, questa è la scelta migliore per il 99% degli utenti. Dovrebbe esserci uno stile unix rm implementato per Windows che non fa altro che cancellare ricorsivamente. A proposito, i nostri programmatori MKS remove_tree (vedi sopra) hanno eliminato rmdir, quindi il problema non è Windows ma le app integrate.
David Allan Finch,

6

Uso questo problema con i server che stavo amministrando. Salta esploratore del tutto e usa il prompt dei comandi. Passare alla cartella e "del " .

In questo modo si evitano le spese generali della GUI (explorer is trash) e del cestino.


Abbiamo provato questo: aggiungerò altro alla domanda.
David Allan Finch,

4

A meno che non sia necessario per applicazioni legacy a 16 bit, provare ad aumentare le prestazioni disabilitando la generazione di nomi di file brevi. Ciò può avere un impatto significativo sulle operazioni di directory con un numero elevato di file.

Regedt32 select:
"HKLM\system\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameC
reation"=1

Quindi utilizzare:

Percorso [unità:] RMDIR / S / Q

per rimuovere la directory con tutti i suoi file.


Questo è interessante da sapere.
David Allan Finch,


3

Che ne dici di spostare quella cartella temporanea su un'altra unità / partizione? Invece di eliminare tutta la spazzatura, è possibile formattare l'unità (GUI o riga di comando). Con il formato rapido, questo dovrebbe essere ragionevolmente veloce.


1
Ci abbiamo provato e a volte non lo permetteva. Il client ora esegue il programma in una directory diversa ogni volta.
David Allan Finch,

Crea un collegamento tra il percorso e l'unità, ovvero: il collegamento "c: \ la mia app stupida \ dove sono archiviati i file" indica l'unità X: in un batch di avvio
Nime Cloud,

2

Questa è una combinazione dei post precedenti

aprire una finestra di comando:
File -> Run -> cmd

Rimuovi la directory
rmdir /s /q FOLDERNAME

O

Rimuovi uno schema di file
cd \....\directory
del *.[something]

Come hai notato nella tua domanda, Windows Explorer può davvero rallentare le cose.

Dopo aver visto l'aggiornamento, ne ho uno mio
Dai un'occhiata a questo elenco di programmi di rimozione file


Avevo notato questo con solo centinaia di file in passato, è un peccato che Explorer possa essere fatto per farlo velocemente come le app della riga di comando: potrebbero far sì che il client lo faccia da solo. Grazie per la tua risposta.
David Allan Finch,

1

Non ho niente di meglio di del e rm, ma anche se impiegano molto tempo, non dovrebbe provocare danni alla partizione. I file bloccati potrebbero essere dovuti al fatto che il programma che li ha creati è morto inaspettatamente.

A volte, anche se i file non possono essere eliminati, possono essere spostati in un'altra sottodirectory temporanea. Ho appena creato una sottodirectory _todel e li ho spostati lì. Di solito funziona meglio se sposto l'intera directory di un livello superiore, anziché i file stessi.

A parte questo, l'unico modo per velocizzare le eliminazioni è deframmentare il disco rigido. Una soluzione temporanea potrebbe essere quella di spostare questa directory in una condivisione samba o utilizzare una giunzione NTFS su un disco rigido USB portatile. (Una piccola partizione sarebbe migliore e più veloce rispetto all'utilizzo dell'intero disco rigido). È quindi possibile espellere il disco rigido ed eseguire una formattazione rapida su un altro PC.


Questo è quello che penso - IE i file danneggiati, ma perché non vengono chiusi dal kernel NT? La velocità è un problema con il programma, quindi l'utilizzo di Samba o di un disco rigido USB non è un inizio. Ma al cliente è stato suggerito di creare una partizione separata per ogni esecuzione e di riformattare. Non sono sicuro se l'hanno ancora provato. - Grazie
David Allan Finch,

1

Una partizione danneggiata dall'eliminazione dei file? Questo è un grosso problema con il disco, indipendentemente dal numero di file che vengono eliminati.

Proverei a eliminare e cancellare il maggior numero possibile dalla riga di comando fino a quando non ne trovi uno bloccato. Quindi utilizzare Process Explorer per trovare quale processo ha quel file aperto. Uccidi quel processo (se puoi), quindi esegui di nuovo l'eliminazione. Risciacqua, ripeti :)


Ci piacerebbe provare questo, ma non abbiamo accesso diretto alla macchina e l'applicazione è morta. Grazie comunque.
David Allan Finch,

1

Riavvia utilizzando un CD Linux "Live", l'rm -rf


Non possiamo semplicemente riavviare questo server poiché è fondamentale per il client, ma grazie per la risposta.
David Allan Finch,

1

Kiao hacky, ma puoi creare uno script che eliminerà i file, non conosco il formato, ma supponendo che siano i file che iniziano con le lettere az, puoi farlo

deltree /y a*
deltree /y b*
...
deltree /y z*

cambia deltree con il tuo metodo di rimozione preferito. probabilmente essere più lento, ma meno soggetto a errori?

sidenote: puoi anche provare a installare cygwin per ottenere comandi come rm che probabilmente continueranno a cancellare i file anche dopo che si è verificato un errore con un file.


Questo è stato provato, ma in realtà non ha risolto il problema, grazie comunque.
David Allan Finch,

Abbiamo anche installato MKS Nutcracker ma per motivi di sicurezza le utility della riga di comando sono state rimosse - non una scelta. Ma quello che abbiamo fatto è stato scritto da solo e questo funziona.
David Allan Finch,

1

I vari metodi funzionano soprattutto. Se hai caricato cygwin su una chiavetta USB, puoi semplicemente collegarlo alla tua USB locale, accendere la tua shell cygwin ed eseguire il comando RM come indicato sopra. Questo è un modo pratico per tenere a portata di mano la flessibilità di Unix.


Questa è una soluzione ragionevole quando gestisci il sistema.
David Allan Finch,

1

È inoltre possibile avviare la console di ripristino o qualcosa del genere. Ciò dovrebbe ignorare completamente eventuali strani problemi con il sistema operativo.


Spiacenti, non possiamo semplicemente riavviare il server, ma grazie per la risposta.
David Allan Finch,

1

Montare la cartella da una macchina Linux e fare l'eliminazione ricorsiva da lì.

# mount -t cifs //server/share /mnt/tobedeleted -o username=yourshareusername

# rm /mnt/tobedeleted/* -R

È anche possibile utilizzare un processo cron per eliminare i file a intervalli regolari.


hai provato questo?
David Allan Finch,

1

Perché non usare solo robocopy e eseguire il mirroring di una directory vuota?

Basta creare una cartella vuota, quindi utilizzare:

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR

0

Se nessuno degli altri suggerimenti funziona, hai considerato di accelerare l'I / O?

Acquista controller migliori, dischi più veloci ..

O mi chiedo, se i file sono temporanei (come intendi) e le dimensioni lo consentono, potresti aggiungere ulteriore RAM al box (economico) e impostare un disco RAM?

Nel migliore dei casi, le prestazioni non sarebbero degradate quando si eliminano grandi volumi di file. Nel peggiore dei casi, un riavvio cancellerebbe la partizione.


Mi piace ma non credo che il cliente sborserà perché si aspettano una nuova versione del programma, grazie per la risposta.
David Allan Finch,

La RAM del server nel Regno Unito è attualmente di circa GBP 10 per gigabyte.
tomfanning,

Vero, ma il cliente paga X per la macchina (da un preventivo) e non vede alcun motivo per spendere Y di più.
David Allan Finch,

Perché il server specificato non fa abbastanza bene il lavoro?
tomfanning,

È abbastanza buono per il lavoro. Il problema è che il programma ha un bug che sta per essere risolto. Non spenderanno più soldi.
David Allan Finch,

0

Prova a tagliarlo e incollalo nel cestino, dovrebbe bypassare cercando di spostare ogni singolo file. Non sono sicuro di cosa farà per svuotare il cestino, perché probabilmente passerà su ogni file.


Penso che il client abbia provato questo e non era molto meglio che usare normalmente Explorer. Grazie
David Allan Finch,

0

L'eliminazione con MAIUSC + CANC fa differenza per quanto riguarda la velocità?


Quando l'ho provato per ultimo è stato più o meno lo stesso.
David Allan Finch,

In effetti l'ho appena provato di nuovo, con una vecchia installazione e sto ancora aspettando. Probabilmente mi arrenderò e userò l'MKS rm.
David Allan Finch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.