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_file
contém caminhos, não nomes, você precisa usar -path
para 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