Ho una directory con un sacco di estensioni di file misti e vorrei elencare un'estensione di file specifica (forse qualcosa come grep *.mp3 ) e durante l'elenco, eliminali con un output. Come posso farlo o se c'è un imbroglione, sentiti libero di taggarmi.
Esempio:
grep "*.mp3" . | rm -fr
Risposta accettata:
Iniziamo con una directory con tre mp3 file:
$ ls *mp3
a.mp3 b.mp3 c.mp3
Ora, eliminiamoli dopo aver elencato ciò che stiamo eliminando:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Al termine, il mp3 i file sono spariti:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Come funziona
-
`trova .
Questo avvia un
findcomando. Cercherà i file nella directory corrente,.. -
-maxdepth 1Per impostazione predefinita,
findricerca ricorsivamente le sottodirectory. Questo gli dice di non farlo. Con-maxdepth 1, il comandofindguarderà solo ciò che trova nella directory corrente e non esplorerà nessuna delle sottodirectory della directory corrente. -
-name '*.mp3'Questo dice a find di cercare solo i file con
.mp3estensione. -
-printf 'Deleting %p\n'Questo dice a find di stampare un messaggio su ogni file trovato.
Ovviamente puoi cambiarlo con un altro messaggio, se lo desideri. Se non vuoi ricevere un messaggio, questa opzione può essere omessa del tutto.
-
-deleteQuesto dice a find di eliminare ogni file.
Ricerca senza distinzione tra maiuscole e minuscole
Se vuoi trovare anche i file chiamati .MP3 o .Mp3 ecc., quindi abbiamo bisogno di una ricerca senza distinzione tra maiuscole e minuscole e utilizziamo -iname :
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete