439 Stimmen

Wie kann die Tiefe einer rekursiven Dateiliste begrenzt werden?

Gibt es eine Möglichkeit, die Tiefe einer rekursiven Dateiliste unter Linux zu begrenzen?

Der Befehl, den ich im Moment verwende, lautet:

ls -laR > dirlist.txt

Aber ich habe etwa 200 Verzeichnisse und jedes von ihnen hat 10 Verzeichnisse. Es würde also viel zu lange dauern und zu viele Systemressourcen in Anspruch nehmen.

Alles, was mich wirklich interessiert, sind die Eigentümer- und Berechtigungsinformationen für die Unterverzeichnisse der ersten Ebene:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

EDIT:

Endgültige Wahl des Kommandos:

find -maxdepth 2 -type d -ls >dirlist

3 Stimmen

Könnten Sie auch etwas wie ls -la /var/www/vhosts/* ?

616voto

Alberto Zaccagni Punkte 29518

Prüfen Sie die -maxdepth Flagge von find

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

Hier habe ich 1 als maximale Ebenentiefe verwendet, -type d bedeutet, nur Verzeichnisse zu finden, die dann ls -ld listet den Inhalt in Langform auf.

3 Stimmen

Da der OP die Berechtigungen der Verzeichnisse selbst wissen möchte, sollten Sie die -d Option zu ls .

0 Stimmen

@Peter van der Heijden: Ich habe gerade die find Teil, um sein Hauptproblem zu lösen. Wie auch immer, danke, ich füge es hinzu.

3 Stimmen

Ich benutze -print0 y xargs -0 eine Menge. Beispiel: find . -maxdepth 1 -type d -print0 | xargs -0 ls -d

129voto

Volker Siegel Punkte 2919

Benutzen Sie find Die Optionen

Es gibt eigentlich keine Ausführung von /bin/ls benötigt;

Find hat eine Option, die genau das tut:

find . -maxdepth 2 -type d -ls

Um nur die eine Ebene der Unterverzeichnisse zu sehen, an denen Sie interessiert sind, fügen Sie -mindepth auf das gleiche Niveau wie -maxdepth :

find . -mindepth 2 -maxdepth 2 -type d -ls

Ausgabeformatierung verwenden

Wenn die Details, die angezeigt werden, anders sein sollten, -printf kann jedes Detail über eine Datei in einem benutzerdefinierten Format anzeigen; Um die symbolischen Berechtigungen und den Namen des Eigentümers der Datei anzuzeigen, verwenden Sie -printf con %M y %u dans le format .

Später habe ich bemerkt, dass Sie die vollständigen Eigentumsinformationen haben wollen, die Folgendes umfassen die Gruppe. Verwenden Sie %g im Format für den symbolischen Namen, oder %G für die Gruppenkennung (wie auch %U für numerische Benutzerkennung)

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

So erhalten Sie genau die Details, die Sie für die richtigen Dateien benötigen.

Ich werde ein Beispiel geben, das tatsächlich unterschiedliche Werte für Benutzer und Gruppe zeigt:

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(Aus Gründen der Lesbarkeit bearbeitet: eingerückt, letzte Zeile gekürzt)

Hinweise zur Leistung

Obwohl die Ausführungszeit für diese Art von Befehlen meist unerheblich ist, ist die Leistungssteigerung in diesem Fall groß genug, um darauf hinzuweisen:

Wir ersparen uns nicht nur die Erstellung eines neuen Prozesses für jeden Namen - ein riesig Aufgabe - die Informationen müssen nicht einmal gelesen werden, da find kennt es bereits.

14 Stimmen

Das sollte die akzeptierte Antwort sein, viel besser als meine.

1 Stimmen

@AlbertoZaccagni Ich denke, wir mögen kurze Antworten, um die Dinge schnell zum Laufen zu bringen.

84voto

Sameer Punkte 2295

tree -L 2 -u -g -p -d

Druckt den Verzeichnisbaum in einem hübschen Format bis zur Tiefe 2 (-L 2). Druckt Benutzer (-u) und Gruppe (-g) und Berechtigungen (-p). Nur Verzeichnisse ausgeben (-d). tree hat eine Menge anderer nützlicher Optionen.

0 Stimmen

Einfach tree -L 2 xxx/ o tree -L 2 -d xxx/ ist in manchen Fällen ausreichend.

8voto

recolic Punkte 486

Alles, was mich wirklich interessiert, sind die Eigentümer- und Berechtigungsinformationen für die Unterverzeichnisse der ersten Ebene.

Ich habe eine einfache Lösung gefunden, als ich mit meinen Fischen spielte, die Ihren Bedürfnissen perfekt entspricht.

ll `ls`

ou

ls -l $(ls)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X