Seu problema original não exige a chamada de encontrar recursivamente, mas eu suponho que esse não era o ponto.
Eu acredito que não é possível chamar encontrar recursivamente da maneira que você deseja.
O seguinte não está chamando encontrar recursivamente (ou aninhamento, seja qual for o nome), mas você não pode simplesmente pegar um conjunto de resultados do primeiro achado e alimentá-lo ao segundo? É assim que eu faria instintivamente:
find 'find ./ -maxdepth 1 -type d -name '.*'' \
-maxdepth 1 -type f -name '*.ini' -exec md5sum {} \;
Você também pode usar xargs
para executar a segunda descoberta.
Atualização:
Eu queria adicionar isso, porque a maioria dos utilitários UNIX usa vários argumentos de nomes de arquivos em vez de um, geralmente você pode evitar o -exec
:
md5sum 'find \'find ./ -maxdepth 1 -type d -name '.*'\' -maxdepth 1 -type f -name '*.ini''
Ao aninhar backticks, você adiciona barras invertidas \
antes das internas.
Se imaginarmos que md5sum
leva apenas um argumento de nome de arquivo, sempre podemos envolvê-lo em um for
loop:
for f in 'find \'find ./ -maxdepth 1 -type d -name '.*'\' -maxdepth 1 -type f -name '*.ini''
do
md5sum $f
done
Observe que isso se torna mais difícil se os nomes de arquivos / diretórios que iniciam com -
ou que contêm um espaço estiverem envolvidos. Os utilitários UNIX não funcionam bem com eles. Nesse caso, é necessário adicionar ./
, --
ou aspas.
Obviamente, o exemplo original não é bom, porque poderíamos apenas fazer:
md5sum .*/*.ini