No me funciona en Mac, pero funciona con la opción -E (extendida) (¿tal vez la tubería es una característica extendida?): Buscar -E / ruta / a -iregex ". * \. (Jpg | gif | png | jpeg) "> log
@Gerald: es probable que necesite agrupar su expresión OR entre paréntesis: de lo find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;contrario, el ejecutivo solo se aplica a la última parte ( -iname '*.jpg' en este caso).
Pausado hasta nuevo aviso.
Esa es una observación importante. find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0solo imprimirá los archivos jpg! Necesita paréntesis aquí:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
Hmmm, la -Eopción le dice findque use "expresiones regulares extendidas". Varias otras herramientas tienen una opción similar, pero no estoy seguro de que esta opción esté disponible en todas las distribuciones de UNIX.
tboyce12
8
Funciona también en Mac OS.
c.gutierrez
2
@ tboyce12 de Trabajo sobre ubuntu, que puede especificar el -regextype para simplificar la expresión de expresiones regulares: find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)".
doub1ejack
1
@cjm Quizás find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log. Usar la -iregexbandera le dice findque coincida con mayúsculas y minúsculas sin distinción.
¿Podría explicar por qué agregó los paréntesis (escapado) alrededor de los parámetros nombre / iname?
Bart Kleijngeld
¿Alguna razón para la inconsistencia? -iname *.jpg, -o -name *.jpeg, -o -iname *gifTodos tienen un formato ligeramente diferente.
Carro abandonado el
si al menos pudieras explicar las diferencias con otras respuestas.
el-teedee
6
En complemento a la respuesta de @Dennis Williamson anterior, si desea que la misma expresión regular no distinga entre mayúsculas y minúsculas en las extensiones de archivo, use -iregex:
trabajará. Puede haber una forma más elegante.
fuente
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
contrario, el ejecutivo solo se aplica a la última parte (-iname '*.jpg'
en este caso).find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
solo imprimirá los archivos jpg! Necesita paréntesis aquí:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
Esto le
-E
ahorra tener que escapar de los parens y las tuberías en su expresión regular.fuente
-E
opción le dicefind
que use "expresiones regulares extendidas". Varias otras herramientas tienen una opción similar, pero no estoy seguro de que esta opción esté disponible en todas las distribuciones de UNIX.find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Usar la-iregex
bandera le dicefind
que coincida con mayúsculas y minúsculas sin distinción.Esto utiliza el
file
comando para intentar reconocer el tipo de archivo, independientemente del nombre de archivo (o extensión).Si
/path/to
o un nombre de archivo contiene la cadenaimage
, entonces lo anterior puede devolver resultados falsos. En ese caso, sugeriríafuente
fuente
-iname *.jpg
,-o -name *.jpeg
,-o -iname *gif
Todos tienen un formato ligeramente diferente.En complemento a la respuesta de @Dennis Williamson anterior, si desea que la misma expresión regular no distinga entre mayúsculas y minúsculas en las extensiones de archivo, use -iregex:
fuente
En el uso de Mac OS
fuente
fuente
en caso de que los archivos no tengan extensión podemos buscar el tipo de archivo mime
donde (audio | video | matroska | mpeg) son tipos mime regex
y si quieres eliminarlos:
o eliminar todo lo demás excepto esas extensiones:
observe el ~ en lugar de ~
fuente