Ich versuche zu:
- Listen Sie alle Unterverzeichnisse in einem Verzeichnis der obersten Ebene (/ shared) auf und geben Sie diese in einer Datei namens verzeichnisliste aus
- Anschließend möchte ich getfacl mit der Datei als Eingabe ausführen und die Ergebnisse in eine Datei namens acl_list ausgeben
So erhalten Sie letztendlich die ACLs für alle Unterverzeichnisse in / shared.
Die Schritte, die ich versuche, sind:
ls -d -- /shared/*/*/*/ > directory_list
getfacl < directory_list > acl_list
Gibt es einen anderen Befehl, für den ich verwenden kann (1)Dort, wo die Unterverzeichnisse rekursiv aufgelistet werden, scheint es, dass -dr (rekursiv Verzeichnisse) nicht funktioniert. Ich weiß auch nicht, wie viele Unterverzeichnissebenen es gibt.
Wenn ich den 2. Befehl ausführte, scheint es ein paar Syntaxfehler zu geben, die verhindern, dass er ausgeführt wird, aber ich habe die Syntax von den Linux-Man-Pages überprüft und sollte richtig sein.
Kann mir jemand in die richtige Richtung zeigen?
Vielen Dank
Antworten:
2 für die Antwort № 1Benutzen
find
um eine rekursive Liste zu erstellen:find /shared -type d -print > directory_list
getfacl
erwartet, dass die Dateinamen Befehlszeilenargumente sind, es liest jedoch keine Standardeingabenxargs
diese Übersetzung durchführen:xargs -d "n" getfacl < directory_list > acl_list
Das -d
Die Option gibt das Trennzeichen an und überschreibt die Standardeinstellung von Leerzeichen. Ich glaube jedoch, dass dies eine GNU-Erweiterung ist, die möglicherweise nicht in allen Versionen von xargs
. Wenn Sie es nicht verwenden können, müssen Sie eine Schleife schreiben:
while read -r filename; do
getfacl "$filename"
done < directory_list > acl_list
0 für die Antwort № 2
Das find
Befehl sollte Ihnen das geben, was Sie brauchen:
find /shared -type d
-type d
beschränkt die Ausgabe nur auf Verzeichnisse.
0 für die Antwort № 3
Ich weiß, dass Sie tatsächlich darum gebeten haben, aber benötigen Sie technisch die Zwischenverzeichnis_Liste?
find /shared -type d -print -exec getfacl "{}" + > acl_list