Excluir una lista de directorios del comando de búsqueda de Unix

Excluir una lista de directorios del comando de búsqueda de Unix

Necesito crear una lista de archivos presentes en un directorio pero también pasar un archivo que contenga una lista de directorios para excluir.

He visto la siguiente sugerencia pero no he tenido suerte con ella cuando se trata del indicador de tipo:

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

¿Hay alguna manera de hacerlo o tendré que crear la lista completa y luego trabajar en ella eliminando las que coincidan parcialmente con las del directorio de exclusión?

Respuesta1

Dado que exclude_filecontiene rutas, no nombres, debe usar -pathpara hacer coincidir sus entradas. Para excluir los subdirectorios de directorios coincidentes, también los necesita -prune. Esto debería funcionar:

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

Si solo desea ver archivos, puede imprimir solo archivos:

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

información relacionada