Para executar find
em seu próprio resultado, você pode usar o argumento -c
para sh
(ou bash
) para evitar que o comando outer find trate a parte interna {}
especialmente. No entanto, você precisa passar o resultado da descoberta externa como um argumento para sh
, que pode ser expandido com $0
:
find . -type d -name "*.data" \
-exec sh -c 'find "$0" -type f -name "*.important.txt" -exec echo \{\} \;' \{\} \;
Nota: $0
deve ser cotado ( "$0"
) para evitar problemas com nomes de diretório que contenham espaços em branco.
Esta não é realmente uma solução "recursiva", porque não permite aninhamento arbitrariamente profundo sem algum escape, mas suporta os dois níveis de find -exec
s solicitados no seu exemplo.
Se o seu exemplo é semelhante ao seu problema real, você também pode experimentar o argumento -path
para encontrar:
find . -path '*.data/*important.txt'