Ich muss eine Liste von Dateien erstellen, die in einem Verzeichnis vorhanden sind, aber auch eine Datei übergeben, die eine Liste von Verzeichnissen enthält, die ausgeschlossen werden sollen.
Ich habe den folgenden Vorschlag gesehen, aber ich hatte kein Glück damit, wenn es um das Typ-Flag geht:
find $dir_name $(printf "! -name %s " $(cat $exclude_file))
Gibt es eine Möglichkeit, dies zu tun, oder muss ich die gesamte Liste erstellen und sie dann durcharbeiten, um diejenigen zu entfernen, die teilweise mit denen im Ausschlussverzeichnis übereinstimmen.
Akzeptierte Antwort:
Da Ihre exclude_file enthält Pfade, keine Namen, Sie müssen -path verwenden seinen Einträgen entsprechen. Um die Unterverzeichnisse übereinstimmender Verzeichnisse auszuschließen, müssen Sie auch -prune ausführen Sie. Das sollte funktionieren:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print
Wenn Sie nur Dateien sehen möchten, können Sie nur Dateien drucken:
find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print