Se si desidera eliminare tutti i file il cui nome corrisponde a un determinato modulo, un carattere jolly (glob pattern) è la soluzione più semplice. Alcuni esempi:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Le espressioni regolari sono più potenti di jolly; è possibile alimentare l'output di grep
a rm -f
.Ad esempio, se alcuni dei nomi dei file iniziano con "abc.log"
e alcune con "ABC.log"
, grep
permette di fare un case-insensitive partita:
$ rm -f $(ls | grep -i '^abc\.log\.')
Quando faccio questo, faccio funzionare l'ordine ls | grep ...
prima e controllare che produce l'uscita che voglio - soprattutto se sto usando rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
dove !!
espande al comando precedente. Oppure posso digitare freccia su o Ctrl-P e modificare la riga precedente per aggiungere il comando rm -f
.
Si presume che si stia utilizzando la shell bash. Alcune altre shell, in particolare csh e tcsh e alcune vecchie shell derivate da sh, potrebbero non supportare la sintassi $(...)
. È possibile utilizzare la sintassi backtick equivalente:
$ rm -f `ls | grep -i '^abc\.log\.'`
Il $(...)
sintassi è più facile da leggere, e se siete veramente ambiziosi che possono essere nidificate.
Infine, se il sottoinsieme di file che si desidera eliminare non può essere facilmente espressa con un'espressione regolare, un trucco che uso spesso è quello di elencare i file in un file di testo temporaneo, quindi modificarlo:
$ ls > list
$ vi list # Use your favorite text editor
posso quindi modificare il file list
manualmente, lasciando solo i file che voglio rimuovere, quindi:
$ rm -f $(<list)
o
$ rm -f `cat list`
(Premesso che nessuno dei nomi di file contenenti caratteri divertenti, in particolare gli spazi.)
Oppure, quando si modifica il file list
, posso aggiungere rm -f
all'inizio di ogni riga e poi:
$ . ./list
o
$ source ./list
E "Dite GNU/Linux, non solo Linux", sento un tonfo sordo dai sedili posteriori. –
A proposito, perché il -rf? Sono queste cartelle? f è forzare, r è ricorsivo. Funzionerà se è solo un file ma sarà avvisato, usando -rf ogni volta che si desidera eliminare qualcosa è molto (molto) (molto molto) pericoloso. (e dovresti aggiungere il tag "bash" perché "linux" è troppo ampio – Depado
@BorisStitnicky - Sono curioso di sapere perché è necessario il 'GNU'? – user66001