GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit soubory se specifickou příponou v příkazovém řádku Linuxu

Můžete nastat situaci, kdy budete chtít odstranit více souborů, které mají konkrétní příponu. Přesně to vám pomůže tento tutoriál.

Pomocí příkazu rm odstraníte soubory a složky následujícím způsobem:

rm [option] filename

Může to vypadat, že zde potřebujete znát přesné názvy souborů, ale to není pravda.

Dovolte mi ukázat vám několik způsobů, jak odstranit více souborů na základě jejich přípony.

Metoda 1:Odebrání souborů podle přípony pomocí příkazu rm

V mém příkladu mám spoustu souborů gif, které končí příponami .gif.

K jejich odstranění mohu použít příkaz rm takto:

rm *.gif

Odstraňování souborů naslepo by mohlo být riskantní. Vždy je dobré nejprve zjistit, jaké soubory budou smazány pomocí příkazu ls:

ls *.gif

Zde je návod, jak smažu soubory s příponou .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

To lze provést pro jakoukoli příponu souboru, nejen pro .gif. Můžete dokonce kombinovat více rozšíření.

$ 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
💡Můžete použít interaktivní možnost -i s příkazem rm, který požaduje potvrzení před odstraněním každého souboru. To však nemusí být vhodné, pokud máte mnoho souborů k odstranění.

Zajímá vás, jak to funguje? Zástupné znaky!

Stručně řečeno, zástupný znak je speciální znak, který používáte ke shodě s konkrétním vzorem. Níže je několik často používaných zástupných znaků:

Wilcard Použít
* Odpovídá jednomu nebo více výskytům
? Shoda s jedním výskytem
[] (hranaté závorky) Zadejte rozsah pro shodu
^ Vyloučit ze shody

Zde jste použili zástupný znak *, což znamená, že se může shodovat s jedním nebo více výskyty jakéhokoli znaku.

Když řeknete *.gif , znamená libovolnou kombinaci písmen, která vede až k .gif . Jinými slovy, poskytuje vám všechny soubory s příponou .gif .

Každý zástupný znak lze použít navíc k dalším zástupným znakům. Ale nezabírejme teď do těchto podrobností.

Ta tečka mezi * a rozšířením je důležitá!

Mnoho lidí dělá chybu v záměně *.gif s *gif . Toto není správné. Tečka (.) mezi * a názvem rozšíření je zásadní.

Vezměte scénář s následujícími soubory a podívejte se, co se stane, když použiji regulární výraz *gif místo *.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'

Smazal také soubory s řetězcem gif v něm, i když to nebyla přípona souboru, měl pouze gif na konci názvu souboru bez předchozí tečky.

Když odstraňujete soubory se zástupnými znaky nebo regulárním výrazem, ujistěte se, že jste byli co nejpřesnější.

Metoda 2:Rekurzivně odstraňte soubory s konkrétní příponou pomocí příkazu find

Příkaz rm odstraní pouze soubory v aktuálním adresáři. Neodstraní soubory z podadresářů, a to ani s rekurzivní možností.

Chcete-li rekurzivně odstranit soubory s určitou příponou, můžete zkombinovat příkaz find a příkaz rm:

Zde je příklad, kdy mám v podadresářích také soubory .gif.

$ 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

Chcete-li soubory odstranit, můžete použít příkaz find takto:

find . -type f -name "*.gif" -exec rm -v {} \;

Zde je výstup, když jsem spustil příkaz:

$ 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

Pojďme to rozebrat.

  • Tečka za "najít" znamená hledat v aktuálním adresáři
  • Příznak "-name" určuje název souboru, kde můžeme použít regulární výraz
  • Příznak "-exec" se používá k provedení příkazu bash na základě výsledku příkazu find
  • Složené závorky "{}" fungují jako zástupný symbol pro výsledek shodných souborů, takže "rm -v {}" smaže soubory, které našli nalezený příkaz.
  • Nakonec středník ukončí příkaz prováděný vaším shellem (příkaz po exec) a použije se zpětné lomítko '\', aby byl středník správně ukončen. Neměli byste si s tím dělat starosti.

Další příklady příkazu find se můžete dozvědět v níže uvedeném tutoriálu.

Pokročilý bonusový tip:Použijte příkaz find k práci se soubory s více příponami

Výše uvedený příkaz nepokrývá hledání souborů s více příponami, něco jako "rm *.gif *.txt"

Chcete-li toho dosáhnout, můžete použít -o argument, který znamená „logický operátor OR“. Ale také musíme použít zpětné lomítko '\', abychom opustili závorky

$ 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'

Zde můžete vidět, že všechny soubory s příponou 'txt' a soubory s příponou 'gif' jsou rekurzivně odstraněny.

Vím, že budete mít pocit, že použití příkazu find zvlášť pro každý typ přípony souboru by bylo jednodušší a nemýlíte se.

Závěr

Tento článek se zabýval odstraňováním souborů s konkrétní příponou. Podívali jsme se také na rekurzivní vyhledávání a odstraňování těchto souborů.

„S velkou mocí přichází velká zodpovědnost“ , pamatujte na to, když používáte zástupné znaky a regulární výraz. Jeden překlep a důležité soubory mohou být neúmyslně smazány.


Linux
  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak odstranit všechny soubory s konkrétní příponou v konkrétní složce?

  3. Jak nahradit soubor v jar příkazovým řádkem v linuxu?

  1. Jak odstranit OBROVSKÉ (100-200 GB) soubory v Linuxu

  2. Jak přejmenovat soubory v Linuxu

  3. Jak skrýt soubory s konkrétní příponou?

  1. Tipy pro výpis souborů s ls na příkazovém řádku Linuxu

  2. Jak najít soubory v Linuxu pomocí příkazu Najít

  3. Jak najít soubory pomocí příkazu fd v Linuxu