it-swarm-eu.dev

Jak použít příkaz find k hledání více rozšíření

Všechny obrázky jpg mohu získat pomocí:

find . -name "*.jpg"  

Jak ale mohu do výsledků přidat také soubory png?

143
wong2

Mezi různými parametry použijte příznak -o.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funguje jako kouzlo.

POZNÁMKA musí být mezera mezi závorkou a jejím obsahem, jinak vyhraje 't práce.

Vysvětlení:

  • -type f - hledat pouze soubory (nikoli adresáře)
  • \( & \) - je nutné, aby se -type f Použil na všechny argumenty
  • -o - logický OR operátor)
  • -iname - jako -name, Ale zápas nerozlišuje velká a malá písmena
176
Shadur

Můžete kombinovat kritéria s -o jako navrhl Shadur . Všimněte si, že -o má nižší prioritu než juxtaposition, takže budete možná potřebovat závorky.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

V systému Linux můžete použít -regex kombinovat rozšíření přísnějším způsobem. Výchozí syntaxe regexpu je Emacs ( základní regexps plus několik rozšíření, například \| pro střídání); existuje možnost přepnutí na rozšířený regexps .

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

Na FreeBSD, NetBSD a OSX můžete použít -regex zkombinováno s -E pro rozšířené regexpy.

find -E . -regex '.*\.(jpg|png)'

To je správnější:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
44
Dimitry

Abychom to vyjasnili, jediná možnost, která funguje v systémech Linux, Unix a macOS, je:

find -E . -regex '.*\.(jpg|png)'

Je to proto, že verze OS X je trochu jiná, ale je důležité psát věci, které na většině platforem fungují dobře.

9
sorin