Cuando estoy usando
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
encuentra todos los tipos de archivo. Pero cuando agrego -exec
al final:
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" -exec sh -c 'echo "$0"' {} \;
parece que solo imprime .txt
archivos. ¿Qué estoy haciendo mal?
Nota: usando MINGW (Git Bash)
*.js*
o*.txt
.Respuestas:
es la abreviatura de:
Es decir, dado que no se especifica un predicado de acción (solo condiciones ),
-print
se agrega implícitamente una acción para los archivos que coinciden con las condiciones.(y, por cierto, eso imprimiría
.js
archivos no regulares (-type f
solo se aplica a los.htm
archivos)).Mientras:
es la abreviatura de:
Para
find
(como en muchos idiomas), AND (-a
; implícito cuando se omite) tiene prioridad sobre OR (-o
), y agregar un predicado de acción explícito (aquí-exec
) cancela la-print
acción implícita vista anteriormente. Aquí quieres:O:
Para evitar ejecutar uno
sh
por archivo.fuente
Son los corchetes implícitos. Añadir corchetes explícitos.
\(
\)
o usando xargs (me gusta xargs me parece más fácil, pero aparentemente no es tan portátil).
fuente