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
find
comando. Cercherà i file nella directory corrente,.
. -
-maxdepth 1
Per impostazione predefinita,
find
ricerca ricorsivamente le sottodirectory. Questo gli dice di non farlo. Con-maxdepth 1
, il comandofind
guarderà 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
.mp3
estensione. -
-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.
-
-delete
Questo 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