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