touch 1.txt 2.txt
find . -name "[12].txt" -exec sh -c 'echo "${1}"' sh {} + -exec echo {} +
./2.txt
./2.txt ./1.txt
Por que echo
dentro de sh -c
saídas apenas um arquivo? Hoje pensei ter entendido como find
funciona a partir do Entendimento da opção -exec de `find` , mas agora fiquei confuso novamente. Obteve o mesmo resultado para -exec bash
. TIA
Com:
find
passa o maior número possível de arquivos que encontrou parash
, e você está pedindosh
para passar o primeiro (${1}
ou$1
abreviado) paraecho
. Para passar todos eles, use"$@"
:Ou para
sh
chamarecho
uma vez para cada um deles, use um loop sobre o parâmetro posicional (os parâmetros posicionais são osfor
loops por padrão):