Come rimuovere molti (200000) file?


17

Devo rimuovere 200.000 file (tutti) da una cartella e non desidero eliminare la cartella stessa.

usando rm, ottengo un errore "Elenco argomenti troppo lungo". Ho provato a fare qualcosa con xargs, ma non sono un ragazzo delle coperture, quindi non funziona:

find -name * | xargs rm -f

5
Perché non eliminare la cartella e ricrearla dopo l'eliminazione?
Garconcn,

Risposte:


35
$ find /path/to/folder -type f -delete

15
Vale probabilmente la pena ricordare che GNU find (usato dalla maggior parte delle distribuzioni Linux) può eliminare i file da solo usando -delete. Questo evita anche problemi con i file che contengono virgolette o caratteri di nuova riga (anche se è possibile utilizzare -print0le -0opzioni GNU find e GNU xarg per risolverlo).
DerfK,

3
@DerfK, bella osservazione! Inoltre, un sacco di ppl tendono a giocare con xargsnel frattempo findha -exec command {} +sintassi.
poige,

5

Stai facendo tutto bene. È il '*' che ti dà un problema (la shell lo sta espandendo in un elenco di file anziché in find). La sintassi corretta potrebbe essere:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Quest'ultimo è un po 'meno efficiente poiché passerà nomi più lunghi a xargs, ma difficilmente noterai :-))

In alternativa, potresti sfuggire al tuo '*' in questo modo (tuttavia in quel caso proverà anche a rimuovere "." E ".."; non è un grosso problema - riceverai solo un piccolo avvertimento :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Se i nomi dei tuoi file contengono spazi, utilizza questo:

find . -type f -print0 | xargs -0 rm -f

1
Questo non funziona se hai un nome file che contiene uno spazio.
user9517

@lain: Sì, stavo solo modificando la mia risposta per includere il trucco per gli spazi bianchi :-)
dtoubelis,

3

Il seguente comando eliminerà tutti i file dalla directory corrente :

find . -type f -exec rm {} \;

2
-name '*'non significa "tutti i file". I file si dicono con:-type f
poige,

2

Puoi provare

find /path/to/folder -type f -print0  | xargs -0 rm -f

o

find /path/to/folder -type f -exec rm -f "{}" +

1

Complimenti per la risposta quantistica, ecco alcune aggiunte.

Se ti piace eliminare i file con un modello di nome particolare, puoi scriverlo in questo modo. Inoltre -print aggiunto in modo da poter vedere cosa sta succedendo mentre i file vengono eliminati.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Questo ad esempio cancella tutti i jpeg nella mia directory.

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.