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 en lo que respecta a la marca 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 coinciden parcialmente con las del directorio de exclusión?
Respuesta aceptada:
Dado que su exclude_file
contiene rutas, no nombres, debe usar -path
para que coincida con sus entradas. Para excluir los subdirectorios de directorios coincidentes, también debe -prune
a ellos. 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