J'ai besoin de construire une liste de fichiers présents dans un répertoire mais aussi de passer dans un fichier contenant une liste de répertoires à exclure.
J'ai vu la suggestion ci-dessous, mais je n'ai pas eu de chance avec l'indicateur de type :
find $dir_name $(printf "! -name %s " $(cat $exclude_file))
Existe-t-il un moyen de le faire ou dois-je créer la liste entière, puis la parcourir en supprimant celles qui correspondent partiellement à celles du répertoire d'exclusion.
Réponse acceptée :
Étant donné que votre exclude_file
contient des chemins, pas des noms, vous devez utiliser -path
pour correspondre à ses entrées. Pour exclure les sous-répertoires des répertoires correspondants, vous devez également -prune
eux. Cela devrait fonctionner :
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print
Si vous ne souhaitez voir que les fichiers, vous pouvez n'imprimer que les fichiers :
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print