it-swarm.it

Come utilizzare il comando find per cercare più estensioni

Posso ottenere tutte le jpg immagini usando:

find . -name "*.jpg"  

Ma come posso aggiungere png file anche ai risultati?

143
wong2

Utilizzare il flag -o Tra parametri diversi.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funziona come un incantesimo.

NOTE C'è deve essere uno spazio tra la parentesi e il suo contenuto o ha vinto non funziona.

Spiegazione:

  • -type f - cerca solo i file (non le directory)
  • \( & \) - sono necessari affinché -type f Si applichi a tutti gli argomenti
  • -o - logico OR
  • -iname - come -name, Ma la corrispondenza non fa distinzione tra maiuscole e minuscole
176
Shadur

Puoi combinare i criteri con -o as suggerito da Shadur . Nota che -o ha una precedenza inferiore rispetto alla giustapposizione, quindi potresti aver bisogno di parentesi.

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

Su Linux, puoi usare -regex per combinare le estensioni in un modo più terser. La sintassi regexp predefinita è Emacs ( regexps di base più alcune estensioni come \| per alternanza); c'è un'opzione per passare a regexps estesi .

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

Su FreeBSD, NetBSD e OSX, puoi usare -regex combinata con -E per regexps estesi.

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

Questo è più corretto:

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

Per chiarire, l'unica opzione che funziona su Linux, Unix e macOS è:

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

Questo perché la versione di OS X è leggermente diversa, ma è importante scrivere cose che vadano bene sulla maggior parte delle piattaforme.

9
sorin