Respuestas:
Use la -o
bandera entre diferentes parámetros.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
Funciona de maravilla.
NOTA No debe haber un espacio entre el soporte y su contenido o no va a funcionar.
Explicación:
type -f
- solo busca archivos (no directorios)\(
- necesario para type -f
que se aplique a todos los argumentos-o
- operador lógico OR-iname
- como -name
, pero el partido no distingue entre mayúsculas y minúsculastype -f
no se extiende y se aplica a ambas expresiones sin paréntesis, por lo tanto, find ./ -type f -iname \*.jpg -o -type f -iname \*.png
también funciona ... aunque son dos caracteres más largos :-)
a * b + c
es diferente dea * (b + c)
Puede combinar criterios -o
según lo sugerido por Shadur . Tenga en cuenta que -o
tiene una precedencia menor que la yuxtaposición, por lo que puede necesitar paréntesis.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
En Linux, puede usar -regex
para combinar extensiones de una manera más tersa. La sintaxis regexp predeterminada es Emacs ( expresiones regulares básicas más algunas extensiones como la \|
alternancia); hay una opción para cambiar a expresiones regulares extendidas .
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
En FreeBSD, NetBSD y OSX, puede usar -regex
combinado con -E
expresiones regulares extendidas.
find -E . -regex '.*\.(jpg|png)'
-iname
lugar de -name
- luego también capturará image.JPG
yimage.PnG
Esto es más correcto:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregex
coincide jpg
tanto como JPG Jpg jpG
y tal. Creo que $
no se necesita.
find -E . -iregex '.*\.(jpg|png|gif)'
como se muestra en la respuesta de @ sorin.
Para que quede claro, la única opción que funciona en Linux, Unix y MacOS es:
find -E . -regex '.*\.(jpg|png)'
Esto se debe a que la versión de OS X es un poco diferente, pero es importante escribir cosas que funcionen bien en la mayoría de las plataformas.
-type f \( -iname \*.png -o -iname \*.jpg\)
no funciona en OSX?
find -name
patrón que coincide con múltiples patrones en SO