Eu não acho que você pode fazer isso completamente dentro de find
, já que você precisa ser capaz de ver o arquivo dentro do diretório ao processar o diretório. -prune
precisa operar no próprio diretório, mas -path
e outras condições só vêem o nome do arquivo depois que find
já desceu para o diretório.
Tudo o que posso fazer é extrair um shell para espiar dentro do diretório. Algo parecido com isto:
$ mkdir -p x y/z ; touch x/foo y/omit.txt
$ find -type d \( -exec sh -c '[ -e "$1/omit.txt" ]' sh {} \; -prune -o -print \)
.
./x
foo -o bar
não avalia bar
se foo
for bem-sucedido, portanto, se o diretório for limpo, a impressão não será executada. Adicione -o -print
ao final para imprimir o conteúdo do diretório também. Não podemos usar exec ... {} +
aqui, pois precisamos que isso funcione como uma condição para cada diretório separadamente.