Schließen Sie eine Liste von Verzeichnissen vom Unix-Find-Befehl aus

Schließen Sie eine Liste von Verzeichnissen vom Unix-Find-Befehl aus

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_fileVerzeichnis Pfade und keine Namen enthält, müssen Sie verwenden, -pathum die Einträge abzugleichen. Um Unterverzeichnisse übereinstimmender Verzeichnisse auszuschließen, müssen Sie -prunediese 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

verwandte Informationen