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.
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.
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:
Beispielaufruf:
%Vor% 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.