Všechny obrázky jpg
mohu získat pomocí:
find . -name "*.jpg"
Jak ale mohu do výsledků přidat také soubory png
?
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ísmenaMůž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\)$'
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.