Quando estou usando
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
encontra todos os tipos de arquivo. Mas quando eu adiciono -exec
no final:
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" -exec sh -c 'echo "$0"' {} \;
parece que apenas imprime .txt
arquivos. O que estou fazendo errado?
Nota: usando MINGW (Git Bash)
*.js*
ou*.txt
.Respostas:
é a abreviação de:
Ou seja, como nenhum predicado de ação é especificado (apenas condições ), uma
-print
ação é incluída implicitamente para os arquivos que correspondem às condições.(e, a propósito, isso imprimiria
.js
arquivos não regulares (o-type f
único se aplica a.htm
arquivos)).Enquanto:
é a abreviação de:
Para
find
(como em muitos idiomas), AND (-a
; implícito quando omitido) tem precedência sobre OR (-o
), e adicionar um predicado de ação explícito (aqui-exec
) cancela a-print
ação implícita vista acima. Aqui você quer:Ou:
Para evitar a execução de um
sh
por arquivo.fonte
São os colchetes implícitos. Adicione colchetes explícitos.
\(
\)
ou usando xargs (eu gosto de xargs, acho mais fácil, mas aparentemente não tão portátil).
fonte