it-swarm.com.de

Wie beschränke ich die Tiefe für eine rekursive Dateiliste?

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

Der Befehl, den ich im Moment benutze, ist:

ls -laR > dirlist.txt

Aber ich habe ungefähr 200 Verzeichnisse und jedes von ihnen hat 10 Verzeichnisse. Es wird also viel zu lange dauern und zu viele Systemressourcen beanspruchen.

Alles, woran ich wirklich interessiert bin, sind die Eigentums- 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

BEARBEITEN:

Endgültige Wahl des Befehls:

find -maxdepth 2 -type d -ls >dirlist
310
Jon

Checke 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, in denen dann ls -ld Inhalte im Langformat aufgelistet werden.

452

Nutzen Sie die Optionen von find

Es ist eigentlich kein exec von /bin/ls erforderlich;

Suchen hat eine Option, die genau das macht:

find . -maxdepth 2 -type d -ls

Fügen Sie -mindepth derselben Ebene wie -maxdepth hinzu, um nur die eine Ebene der Unterverzeichnisse anzuzeigen, die Sie interessieren:

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


Verwenden Sie die Ausgabeformatierung

Wenn die angezeigten Details unterschiedlich sein sollten, kann -printf alle Details zu einer Datei im benutzerdefinierten Format anzeigen. Verwenden Sie zum Anzeigen der symbolischen Berechtigungen und des Eigentümernamens der Datei -printf mit %M und %u in format.

Ich habe später bemerkt, dass Sie die vollständigen Eigentumsinformationen benötigen, die die Gruppe enthalten. Verwenden Sie %g im Format für den symbolischen Namen oder %G für die Gruppen-ID (wie auch %U für die numerische Benutzer-ID)

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

Dies sollte Ihnen genau die Details liefern, die Sie für genau die richtigen Dateien benötigen.

Ich werde ein Beispiel geben, das tatsächlich verschiedene 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

(Zur besseren Lesbarkeit bearbeitet: eingerückte, verkürzte letzte Zeile)


Hinweise zur Leistung

Obwohl die Ausführungszeit für diese Art von Befehl zumeist irrelevant ist, ist die Leistungssteigerung hier groß genug, um darauf hinzuweisen:

Wir sparen uns nicht nur das Erstellen eines neuen Prozesses für jeden Namen - eine riesige Aufgabe - die Informationen müssen nicht einmal gelesen werden, da find es bereits weiß.

82
Volker Siegel

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

Druckt den Verzeichnisbaum in einem hübschen Format bis zur Tiefe 2 (-L 2). Benutzer (-u) und Gruppe (-g) und Berechtigungen (-p) drucken. Nur Verzeichnisse drucken (-d). Baum hat viele andere nützliche Optionen.

61
Sameer