Cuando estoy usando
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
encuentra todos los tipos de archivo. Pero cuando agrego -execal final:
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" -exec sh -c 'echo "$0"' {} \;
parece que solo imprime .txtarchivos. ¿Qué estoy haciendo mal?
Nota: usando MINGW (Git Bash)

*.js*o*.txt.Respuestas:
es la abreviatura de:
encontrar . \ (\ ( -type f -a -name "* .htm *" \) -o \ \ ( -name "* .js *" \) -o \ \ ( -name "* .txt" \) \ \) -una impresiónEs decir, dado que no se especifica un predicado de acción (solo condiciones ),
-printse agrega implícitamente una acción para los archivos que coinciden con las condiciones.(y, por cierto, eso imprimiría
.jsarchivos no regulares (-type fsolo se aplica a los.htmarchivos)).Mientras:
encontrar . -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt" \ -exec sh -c 'echo "$ 0"' {} \;es la abreviatura de:
encontrar . \ ( -type f -a -name "* .htm *" \) -o \ \ ( -name "* .js *" \) -o \ \ ( -name "* .txt" -a -exec sh -c 'echo "$ 0"' {} \; \)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-printacción implícita vista anteriormente. Aquí quieres:O:
Para evitar ejecutar uno
shpor 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