Ich muss eine Liste der in einem Verzeichnis vorhandenen Dateien erstellen, aber auch eine Datei übergeben, die eine Liste der auszuschließenden Verzeichnisse enthält.
Ich habe den folgenden Vorschlag gesehen, hatte damit aber kein Glück, was das Typ-Flag angeht:
find $dir_name $(printf "! -name %s " $(cat $exclude_file))
Gibt es eine Möglichkeit, wie ich das machen kann, oder muss ich die gesamte Liste erstellen und sie dann durchgehen und diejenigen entfernen, die teilweise mit denen im Ausschlussverzeichnis übereinstimmen?
Antwort1
Da Ihr exclude_file
Verzeichnis Pfade und keine Namen enthält, müssen Sie verwenden, -path
um die Einträge abzugleichen. Um Unterverzeichnisse übereinstimmender Verzeichnisse auszuschließen, müssen Sie -prune
diese ebenfalls verwenden. 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