Potresti avere una situazione in cui desideri rimuovere più file con una particolare estensione. Questo tutorial ti aiuterà a fare esattamente questo.
Utilizzare il comando rm per eliminare file e cartelle nel modo seguente:
rm [option] filename
Potrebbe sembrare che tu debba conoscere i nomi esatti dei file qui, ma non è vero.
Lascia che ti mostri un paio di metodi per rimuovere più file in base alla loro estensione.
Metodo 1:rimuovi i file per estensione usando il comando rm
Nel mio esempio, ho un sacco di file gif che terminano con estensioni .gif.
Per rimuoverli, posso usare il comando rm in questo modo:
rm *.gif
Rimuovere file alla cieca in questo modo potrebbe essere rischioso. È sempre bene vedere prima quali file verranno eliminati usando il comando ls:
ls *.gif
Ecco come elimino i file con estensione .gif:
$ ls
1.gif 2.gif 3.gif 4.gif a.jpg b.png c.webp
$ ls *.gif
1.gif 2.gif 3.gif 4.gif
$ rm -v *.gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
$ ls
a.jpg b.png c.webp
Questo può essere fatto per qualsiasi estensione di file, non solo .gif. Puoi anche combinare più estensioni.
$ ls
f1.txt f2.txt f3.txt f4.txt not-txt-file.pdf random.txt
$ rm -v *.txt *.pdf
removed 'f1.txt'
removed 'f2.txt'
removed 'f3.txt'
removed 'f4.txt'
removed 'not-txt-file.pdf'
$ ls
random.txt
💡Puoi usare l'opzione interattiva -i con il comando rm che chiede di confermare prima di eliminare ogni file. Tuttavia, questo potrebbe non essere conveniente se hai numerosi file da eliminare. Ti chiedi come funziona? Caratteri jolly!
In poche parole, un carattere jolly è un carattere speciale che usi per abbinare un modello particolare. Di seguito sono riportati alcuni caratteri jolly utilizzati di frequente:
Wilcard | Usa |
---|---|
* | Abbina una o più occorrenze |
? | Abbina una singola occorrenza |
[] (parentesi quadre) | Specifica un intervallo per la corrispondenza |
^ | Escludi dalla corrispondenza |
Hai utilizzato il carattere jolly * qui, il che significa che può corrispondere a una o più occorrenze di qualsiasi carattere.
Quando dici *.gif
, indica qualsiasi combinazione di lettere che porta a .gif
. In altre parole, ti dà tutti i file con estensione .gif
.
Ciascun carattere jolly può essere utilizzato in aggiunta a un altro carattere jolly. Ma non entriamo in questi dettagli in questo momento.
Quel punto tra * ed estensione è importante!
Molte persone commettono l'errore di confondere il *.gif
con *gif
. Questo non è giusto. Il punto (.) tra * e il nome dell'estensione è fondamentale.
Prendi lo scenario con i seguenti file e guarda cosa succede quando uso la regex *gif
invece di *.gif
:
$ ls
1.gif 2.gif 3.gif 4.gif definately-not-a-gif jpg-not-gif not-a-gif
$ rm -v *gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
removed 'definately-not-a-gif'
removed 'jpg-not-gif'
removed 'not-a-gif'
Ha anche eliminato i file con la stringa gif
in esso, anche se non era l'estensione del file, aveva solo gif alla fine del nome del file senza il punto precedente.
Quando rimuovi file con caratteri jolly o regex, assicurati di essere il più preciso possibile.
Metodo 2:elimina ricorsivamente i file con un'estensione particolare usando il comando trova
Il comando rm cancella solo i file nella directory corrente. Non elimina i file dalle sottodirectory, anche con l'opzione ricorsiva.
Per eliminare ricorsivamente file con un'estensione particolare, puoi combinare il comando trova e il comando rm:
Ecco un esempio in cui ho anche file .gif nelle sottodirectory.
$ ls *
file_0.gif file_z.txt not-a-gif not-a-txt
dir1:
file_1.gif file_a.txt not-a-gif not-a-txt
dir2:
file_2.gif file_b.txt not-a-gif not-a-txt
dir3:
file_3.gif file_c.txt not-a-gif not-a-txt
dir4:
file_4.gif file_d.txt not-a-gif not-a-txt
Per eliminare i file, puoi utilizzare il comando trova in questo modo:
find . -type f -name "*.gif" -exec rm -v {} \;
Ecco l'output quando ho eseguito il comando:
$ find . -type f -name "*.gif" -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir3/file_3.gif'
removed './dir2/file_2.gif'
removed './file_0.gif'
removed './dir4/file_4.gif
Analizziamolo.
- Il punto dopo "trova" significa cercare nella directory corrente
- Il flag "-name" specifica il nome del file, dove possiamo usare regex
- Il flag "-exec" viene utilizzato per eseguire un comando bash sul risultato del comando find
- Le parentesi graffe "{}" fungono da segnaposto per il risultato dei file corrispondenti, quindi "rm -v {}" cancellerà i file che trovano il comando trovato.
- Infine, il punto e virgola termina il comando eseguito dalla shell (il comando dopo exec) e viene utilizzata la barra rovesciata '\' in modo che il punto e virgola venga eseguito correttamente. Non dovresti preoccuparti di questo.
Puoi imparare altri esempi del comando trova nel tutorial qui sotto.
Suggerimento bonus avanzato:usa il comando trova per lavorare su file con estensioni multiple
Il comando mostrato sopra non copre la ricerca di file con estensioni multiple, qualcosa come "rm *.gif *.txt"
Per ottenerlo, puoi usare -o
argomento che significa 'operatore OR logico'. Ma dobbiamo anche usare la barra rovesciata '\' per evitare le parentesi
$ ls *
file_0.gif file_z.txt not-a-gif not-a-txt
dir1:
file_1.gif file_a.txt not-a-gif not-a-txt
dir2:
file_2.gif file_b.txt not-a-gif not-a-txt
dir3:
file_3.gif file_c.txt not-a-gif not-a-txt
dir4:
file_4.gif file_d.txt not-a-gif not-a-txt
$ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir1/file_a.txt'
removed './dir3/file_3.gif'
removed './dir3/file_c.txt'
removed './dir2/file_2.gif'
removed './dir2/file_b.txt'
removed './file_0.gif'
removed './file_z.txt'
removed './dir4/file_d.txt'
removed './dir4/file_4.gif'
Qui puoi vedere che tutti i file con estensione 'txt' e i file con estensione 'gif' vengono rimossi, in modo ricorsivo.
So che ti sentirai come se usare il comando trova separatamente per ogni tipo di estensione di file sarebbe più semplice e non ti sbagli lì.
Conclusione
Questo articolo ha trattato la rimozione di file con un'estensione particolare. Abbiamo anche esaminato la ricerca e la rimozione ricorsiva di questi file.
"Da un grande potere derivano grandi responsabilità" , ricordalo quando usi caratteri jolly e regex. Un errore di digitazione e file importanti potrebbero essere eliminati involontariamente.