Come rimuovere tutti i file che iniziano con una determinata stringa in Linux


36

Devo trovare tutti i file che iniziano con il nome NAMEin un albero di directory e rimuovere tutti questi file usando un comando shell.

Risposte:


1

per eliminare tutti i file il cui nome ha nome --- è possibile utilizzare

find -name . 'name*' -exec rm {} \;

1
Puoi anche aggiungere -f come argomento 'rm' in modo da non essere richiesto "Sei sicuro di voler rimuovere il file X?"
UtahJarhead,

Quale versione di grepha un -execinterruttore?
Ben Graham,

Perché questo commento ha dei voti negativi?
Ultrasonic54321

64

Elimina tutti i file nella directory corrente e nelle sue sottodirectory in cui il nome del file inizia con "pippo":

$ find . -type f -name foo\* -exec rm {} \;

NB: usare con cautela - eseguire prima il backup - eseguire prima anche una corsa a secco, ad es

$ find . -type f -name foo\*

ti dirà solo i nomi dei file che verrebbero eliminati.


5
Ho dovuto cancellare oltre 2 milioni di file e correre nei guai, ha find . -type f -name foo\* -deletefatto il trucco
Linas

25

Ho provato in questo modo che funziona per me prova sotto il comando.

rm -rf Example*

qui "Esempio" è un testo comune per tutti i file.


4
Non sono sicuro del perché questa non sia la risposta più votata ....
DanTheMan

@DanTheMan È perché è ~ 4 anni più recente delle altre risposte. Questa è sicuramente la risposta più semplice però.
joshuakcockrell,

10

Puoi usare find:

find . -name "name*" -exec rm {} \;

Inoltre, invece di specificare "." puoi specificare un percorso assoluto.
UtahJarhead,

3

Con l' globstaropzione (abilita con shopt -s globstar):

rm -f **/NAME*

**/si espande a ./, */, */*/, */*/*/ecc Se si dispone di una directory nome che inizia con NAME, il comando si lamentano che rmnon è possibile rimuovere le directory, ma questo è tutto.

Si noti che ciò potrebbe incorrere in limiti di lunghezza della riga di comando se il glob corrisponde a molti file.

In alternativa, con il minor numero rmpossibile di invocazioni , ma non soggetto a limiti di lunghezza della riga di comando:

find . -type f -name 'NAME*' -exec rm -f {} +

(Nota +invece di \;chiudere la -execdichiarazione.)


2

find . -name 'foo'* -type f -delete sembra la risposta più semplice.

Puoi eseguirlo senza il -deleteflag prima di vedere quali file verranno eliminati.


-2

Cercare il numero "Inode" del file / cartella e quindi eliminare utilizzando il numero di inode. Di seguito è riportato un esempio:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

Questa è una buona risposta a una domanda diversa . Non è una risposta a questa domanda.
Scott,
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.