GNU/Linux >> Linux Esercitazione >  >> Linux

Come eliminare file con estensione specifica nella riga di comando di Linux

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.


Linux
  1. Come eliminare file ENORMI (100-200 GB) in Linux

  2. Come rinominare i file in Linux

  3. Come eliminare file e directory in Linux dalla riga di comando

  4. Come eliminare tutti i file con un'estensione particolare in una cartella particolare?

  5. Come nascondere i file con un'estensione specifica?

Come trovare file con il comando fd in Linux

Come scaricare file con il comando Curl in Linux

Come scaricare file con il comando Wget in Linux

Come controllare la versione del sistema operativo con la riga di comando di Linux

Come installare Dig in Linux con esempi di riga di comando

Come rimuovere/eliminare file in Linux usando il comando rm