L'eliminazione di grandi quantità di file in Windows è lenta


34

Ho una scatola di Windows XP con un disco NTFS e l'eliminazione di grandi quantità di file è estremamente lenta. Se seleziono una cartella che contiene un gran numero di file in un albero di cartelle ed elimino (usando shift-del per salvare il cestino) ci vuole tempo che sembra essere direttamente proporzionale al numero di file all'interno della cartella prima ancora che apre la finestra di conferma. Ci vuole quindi un tempo ancora più lungo per eliminare ogni file nella cartella.

C'è un modo per eliminare una cartella in Windows e non avere il tempo impiegato in proporzione al numero di file al suo interno?


Risposte:


60

C'è un modo per eliminare una cartella in Windows e non avere il tempo impiegato in proporzione al numero di file al suo interno?

Non credo, ma alcuni metodi sono chiaramente molto più veloci di altri.

Il modo peggiore è quello di inviare al cestino: è ancora necessario eliminarli. Il prossimo peggio è maiusc + cancella con Windows Explorer: spreca un sacco di tempo a controllare il contenuto prima di iniziare a cancellare qualcosa.

Il prossimo passo è usare rmdir /s/q foldernamedalla riga di comando. del /f/s/q foldernameva anche bene, ma lascia dietro la struttura delle directory.

Il migliore che ho trovato è un file batch a due righe con un primo passaggio per eliminare i file e gli output a zero per evitare il sovraccarico di scrivere sullo schermo per ogni singolo file. Un secondo passaggio quindi pulisce la struttura di directory rimanente:

del /f/s/q foldername > nul
rmdir /s/q foldername

Questo è quasi tre volte più veloce di un singolo rmdir, basato su test di tempo con un disco crittografato di Windows XP, eliminando ~ 30 GB / 1.000.000 di file / 15.000 cartelle: rmdirimpiega ~ 2,5 ore, del+rmdirimpiega ~ 53 minuti. Maggiori informazioni qui .

Questa è un'attività normale per me, quindi di solito sposto le cose che devo eliminare in C: \ stufftodelete e ho quei del+rmdircomandi in un file batch deletestuff.bat. Questo è programmato per funzionare di notte, ma a volte devo eseguirlo durante il giorno, quindi più veloce è, meglio è.


Voto positivo per l'inclusione> nul
Nuktu,

1
Windows mi avrebbe fatto aspettare per scansionare molte migliaia di file da un backup di un vecchio SDK. Ci sarebbe voluta almeno un'ora, nel mio caso potrebbero volerci 10 minuti. L'ho inserito in un file bat per un uso ripetuto: gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos

Vedi anche la stessa risposta con maggiori informazioni su superuser.com/questions/19762/mass-deleting-files-in-windows
Warlike Chimpanzee

1

C'è un modo per eliminare una cartella in Windows e non avere il tempo impiegato in proporzione al numero di file al suo interno?

Bene, sì, formatta la partizione. Sono un po 'sorpreso che nessuno l'abbia suggerito nei 9 anni precedenti.

È abbastanza radicale, ma se prevedi di farlo frequentemente per una cartella specifica, potrebbe valere la pena creare una partizione separata per essa.


Se è troppo radicale, le altre risposte sono la tua unica speranza. C'è una buona spiegazione del perché su serverfault . È per i filesystem linux e XFS, ma qui si applica la stessa logica. Non puoi migliorare molto nelle funzioni del sistema operativo integrato.

Tuttavia, se si conoscono i percorsi di tutti i file che si desidera eliminare, è possibile salvare sulle chiamate che elencano il contenuto della directory e le chiamate rimuovono direttamente, risparmiando un certo sovraccarico. Comunque proporzionale al numero di file.

Personalmente, mi piacciono alcuni dei rapporti sui progressi compiuti per assicurarmi che il programma non sia morto. Quindi mi piace eliminare le cose tramite Python. Ad esempio, se tutti i file si trovano in una directory senza sottodirectory:

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # was not a file

Questo elimina circa 250 file / i sul mio SEAGATE ST3250620NS di 12 anni. Suppongo che sarà molto più veloce sul tuo disco.

Tuttavia, a questo punto è solo una micro-ottimizzazione, quindi non farà molto se non si hanno milioni di file in una directory. (come me, lol, cosa ho fatto D :)


0

Installa gnutools for windowsed esegui:

find YOURFOLDER -type d -maxdepth 3 | xargs rm -Rf

0

Assicurati di non eseguire il backup dei file sul cloud e di provare a eliminarli contemporaneamente!

Con molte soluzioni di backup su cloud, i file vengono bloccati durante il backup e quindi è necessario attendere il backup.

Se stai riscontrando questo problema con una directory temporanea (o qualcosa di cui non è necessario il backup), assicurati che la directory temporanea non sia selezionata nel tuo set di backup.


0

Ho scoperto che le cartelle con diversi livelli di directory tendono a rallentare davvero la capacità di Window di rimuoverle rapidamente. Stavo lavorando a un progetto in cui ci sono voluti 5 livelli per arrivare alla cartella node_modules, che è sempre una bestia da eliminare, anche con

del /f/s/q foldername > nul
rmdir /s/q foldername

Ciò che finisco per fare in questa situazione è spostarmi nella cartella node_modules o in qualsiasi directory abbia i livelli più profondi e iniziare a selezionare ed eliminare una dozzina di directory alla volta. Se ottengo più eliminazioni in corso, questo costringe il Cestino a funzionare in processi paralleli piuttosto che il singolo thread che credo che usi, accelera notevolmente il processo.

Una volta che la mia directory più profonda è vuota, salgo alcuni livelli e faccio la stessa cosa. Questo ha ridotto le eliminazioni che mi hanno richiesto più di un'ora a pochi minuti.

È un processo molto manuale e probabilmente potrebbe essere scritto con un certo successo, ma è quello che ha funzionato per me


0

Ho usato la risposta originale di Hugo per creare un file .bat che utilizzo durante l'eliminazione di progetti NPM. Ho aggiunto una variabile di percorso e devo solo copiare e incollare il percorso una volta. Fai doppio clic sul file .bat e fa tutto il lavoro - non è necessario digitare tutto.

set path="FOLDER_PATH"
del /f/s/q %path% > nul
rmdir /s/q %path%

Esempio di utilizzo:

set path="C:\Projects\My React Project"
del /f/s/q %path% > nul
rmdir /s/q %path%

-2

hai provato a utilizzare il prompt dei comandi

rmdir /s /q foldername

tutte le operazioni di file di grandi dimensioni nelle GUI sono lente, principalmente perché il feedback visivo (barra di avanzamento) deve essere ridipinto più volte


5
Questo non ha senso. L'operazione potrebbe essere lenta poiché la GUI deve contare tutti i file per stimare il tempo richiesto ma non a causa della riverniciatura.
Bender,

sbagliato ... Lavoro costantemente con cartelle di grandi dimensioni (principalmente server win2k) e utilizzo TotalCommander per spostare / copiare / eliminare elementi. Ho notato che se minimizzo TC o metto un'altra finestra dell'applicazione in cima alle cose TC, si ottiene almeno il 50% più veloce. TC sta ancora ridipingendo le cose visive, ma tutto è ignorato nel compositing ...
nEJC

6
Il tuo computer è così lento che le operazioni della GUI influiscono sulle prestazioni di I / O del disco? O TotalCommander è semplicemente incredibilmente codificato male? Il disco è centinaia o migliaia di volte più lento di CPU, RAM e scheda video. Se la grafica rallenta le scritture del disco, hai problemi importanti.
Mr. Shiny e New

1
La domanda "non aveva avuto il tempo impiegato in proporzione al numero di file" per un motivo. Non sto cercando il 50% più veloce.
Sindri Traustason,

@Sindri Se lo fai nel modo prompt dei comandi, non dovrebbe esserci quasi alcun ritardo prima che il sistema inizi a fare la sua magia. Per quanto ho capito, questa pre-elaborazione è dove si trova il tuo problema.
nEJC
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.