Yanıtlar:
-oFarklı parametreler arasındaki bayrağı kullanın .
find ./ -type f \( -iname \*.jpg -o -iname \*.png \) tıkır tıkır çalışıyor.
NOT Orada gerekir parantez ve içeriğini arasında bir boşluk olabilir ya da çalışmaz.
Açıklama:
type -f - yalnızca dosyaları arayın (dizinleri değil)\(- type -fTüm argümanlara başvurmak için gerekli-o - mantıksal VEYA operatörü-iname- gibi -name, ancak maç büyük / küçük harfe duyarsıztype -fUzatmak ve parantez olmadan hem ifadeler için geçerli Yani gelmez find ./ -type f -iname \*.jpg -o -type f -iname \*.pngdaha uzun :-) iki karakter olsa ... da çalışır
a * b + cfarklı olduğu gibia * (b + c)
Sen ile kriterlerini birleştirebilirsiniz -oolarak shadur önerdiği . -oYan yana sıralamaya göre daha düşük önceliğe sahip olduğunu unutmayın , bu nedenle parantez içine ihtiyacınız olabilir.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
Linux'ta -regexuzantıları başka bir yolla birleştirmek için kullanabilirsiniz . Varsayılan regexp sözdizimi Emacs'dir ( temel regexps artı değişme gibi birkaç uzantı \|); genişletilmiş regexps geçiş yapmak için bir seçenek var .
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
FreeBSD, NetBSD ve OSX'te genişletilmiş regexps -regexile birlikte kullanabilirsiniz -E.
find -E . -regex '.*\.(jpg|png)'
-inameyerine -nameo zaman da yakalayacaktır - image.JPGveimage.PnG
Bu daha doğru:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregexmaçları jpgyanı sıra JPG Jpg jpGve bu tür. Ben $gerekli olmadığını düşünüyorum .
find -E . -iregex '.*\.(jpg|png|gif)'@ sorin'in cevabında gösterildiği gibi.
Netleştirmek için, Linux, Unix ve macOS tadı üzerinde çalışan tek seçenek:
find -E . -regex '.*\.(jpg|png)'
Bunun nedeni, OS X sürümünün biraz farklı olması, ancak çoğu platformda iyi giden şeyler yazmak için önemlidir.
-type f \( -iname \*.png -o -iname \*.jpg\)OSX'te hangi kısmı çalışmıyor?
find -nameBirden şekilde eşleşir desen SO de