Mám adresář s hromadou smíšených přípon souborů a chtěl bych uvést konkrétní příponu souboru (možná něco jako grep *.mp3
) a při výpisu je smažte s výstupem. Jak to mohu udělat nebo pokud dojde k podvodu, neváhejte mě označit.
Příklad:
grep "*.mp3" . | rm -fr
Přijatá odpověď:
Začněme s adresářem se třemi mp3
soubory:
$ ls *mp3
a.mp3 b.mp3 c.mp3
Nyní je smažeme poté, co uvedeme, co mažeme:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Poté, co je hotovo, mp3
soubory jsou pryč:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Jak to funguje
-
`najít .
Tím se spustí
find
příkaz. Bude hledat soubory v aktuálním adresáři.
. -
-maxdepth 1
Ve výchozím nastavení
find
rekurzivně prohledává podadresáře. To říká, že to nemá dělat. S-maxdepth 1
, příkazfind
se podívá pouze na to, co najde v aktuálním adresáři, a neprozkoumá žádné podadresáře aktuálního adresáře. -
-name '*.mp3'
To říká find, aby hledal pouze soubory s
.mp3
rozšíření. -
-printf 'Deleting %p\n'
To říká find, aby vytiskl zprávu o každém nalezeném souboru.
Pokud chcete, můžete to samozřejmě změnit na jinou zprávu. Pokud zprávu nechcete, můžete tuto možnost zcela vynechat.
-
-delete
To říká find, aby smazal každý soubor.
Vyhledávání bez rozlišení malých a velkých písmen
Pokud chcete také najít soubory s názvem .MP3
nebo .Mp3
atd., pak potřebujeme vyhledávání bez rozlišení velkých a malých písmen a použijeme -iname
:
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete