Rekursive Funktion zum Zurückgeben der Verzeichnistiefe des Dateibaums

8

Ich versuche eine Funktion zu schreiben, die das Dateiverzeichnis durchquert und mir den Wert des tiefsten Verzeichnisses gibt. Ich habe die Funktion geschrieben und es sieht so aus, als würde sie in jedes Verzeichnis gehen, aber mein Zähler scheint überhaupt nicht zu funktionieren.

%Vor%

Ich möchte, dass die Funktion ein Verzeichnis eingibt, sagen wir / home, und es wird in jedem Unterverzeichnis nach unten gehen und den tiefsten Wert finden. Ich versuche Rekursion besser zu lernen, aber ich bin mir nicht sicher, was ich falsch mache.

    
Jef 01.12.2010, 21:32
quelle

6 Antworten

3

Hier ist eine Version, die zu funktionieren scheint:

%Vor%     
DigitalRoss 01.12.2010, 22:22
quelle
8

Offensichtlich sollte dafür gefunden werden

%Vor%

Am Ende benutze ich awk, um nur die Ausgabe zu drucken, aber wenn das die Ausgabe wäre, die du haben wolltest, wäre es besser, sie einfach so zu wiederholen.

Nicht dass es hilft, Rekursion zu lernen, natürlich.

    
Sorpigal 02.12.2010 12:50
quelle
4

Hier ist ein One-Liner, der ziemlich schnell ist:

%Vor%

Oder als Funktion:

%Vor%     
kipkoan 16.03.2012 20:17
quelle
3

Nur ein paar kleine Änderungen an Ihrem Skript. Ich habe einige erläuternde Kommentare hinzugefügt:

%Vor%

Es druckt die maximale Tiefe (einschließlich des Anfangsverzeichnisses als 1) und den ersten Verzeichnisnamen, der in dieser Tiefe gefunden wird. Sie können den Test if ((counter > max)) in >= ändern und es wird der letzte Verzeichnisname gedruckt, der in dieser Tiefe gefunden wird.

    
Dennis Williamson 02.12.2010 01:36
quelle
1

Der Befehl AIX (6.1) find scheint ziemlich begrenzt zu sein (z. B. keine printf-Option). Wenn Sie alle Verzeichnisse bis zu einer bestimmten Tiefe auflisten möchten, versuchen Sie diese Kombination aus find und dirname . Speichern Sie den Skriptcode als maxdepth.ksh. Im Vergleich zur Linux find -maxdepth -Option stoppt AIX find nicht bei der angegebenen maximalen Stufe, was zu einer längeren Laufzeit führt, abhängig von der Größe / Tiefe des gescannten Verzeichnisses:

%Vor%

Beispielaufruf:

%Vor%     
Thomas T. 17.03.2015 11:45
quelle
0

Der traditionelle Weg dazu ist, dass auch dir_depth die maximale Tiefe zurückgibt. Sie geben also sowohl den Namen als auch die Tiefe zurück.

Sie können ein Array, eine Struktur oder ein Objekt nicht in bash zurückgeben, sodass Sie z. eine Komma-getrennte Zeichenfolge stattdessen ..

%Vor%

BEARBEITEN: Jetzt behoben. Es beginnt mit dem Verzeichnis, das Sie als Stufe 1 übergeben haben, und zählt dann aufwärts. Ich habe das cd entfernt, da es nicht notwendig ist. Beachten Sie, dass dies fehlschlägt, wenn Dateinamen Kommas enthalten.

Sie sollten vielleicht eine Programmiersprache mit mehr integrierten Datenstrukturen wie Python in Betracht ziehen.

    
Matthew Flaschen 01.12.2010 21:35
quelle

Tags und Links