Exclua uma lista de diretórios do comando unix find

Exclua uma lista de diretórios do comando unix find

Preciso construir uma lista de arquivos presentes em um diretório, mas também passar um arquivo contendo uma lista de diretórios a serem excluídos.

Vi a sugestão abaixo, mas não tive sorte com ela no que diz respeito ao sinalizador de tipo:

find $dir_name $(printf "! -name %s " $(cat $exclude_file))

Existe uma maneira de fazer isso ou precisarei criar a lista inteira e, em seguida, trabalhar nela, removendo aquelas que correspondem parcialmente às do diretório de exclusão.

Responder1

Dado que exclude_filecontém caminhos, não nomes, você precisa usar -pathpara corresponder às suas entradas. Para excluir os subdiretórios dos diretórios correspondentes, você também precisa deles -prune. Isso deve funcionar:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print

Se você quiser apenas ver arquivos, poderá imprimir apenas arquivos:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print

informação relacionada