Devo creare un elenco di file presenti in una directory ma anche passare un file contenente un elenco di directory da escludere.
Ho visto il suggerimento qui sotto ma non ho avuto fortuna quando si tratta del flag di tipo:
find $dir_name $(printf "! -name %s " $(cat $exclude_file))
C'è un modo per farlo o dovrò creare l'intero elenco e quindi risolverlo rimuovendo quelli che corrispondono parzialmente a quelli nella directory di esclusione.
Risposta accettata:
Dato che il tuo exclude_file
contiene percorsi, non nomi, devi usare -path
per abbinare le sue voci. Per escludere le sottodirectory delle directory corrispondenti, devi anche -prune
loro. Questo dovrebbe funzionare:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print
Se vuoi solo vedere i file, puoi stampare solo i file:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print