Gibt es einen Befehl, um die maximale Ordnertiefe des gesamten Systems zu erhalten?

0

Kurze Version: Gibt es einen Befehl und / oder einen Befehlssatz und / oder ein Hilfsprogramm, um die maximale Tiefe der Ordner in meinem Dateisystem zu ermitteln?

Lange Version: Ich arbeite unter Mac OS X. Ich würde gerne wissen, welcher Ordner sich auf meinem System am tiefsten befindet. Dies liegt daran, dass ich einen Befehl im Stammverzeichnis starten möchte / und es wird rekursiv sein und ich möchte nicht, dass es hängen bleibt (unerwartete Ergebnisse). Ich muss also wissen, wie viele Ordnerebenen sich dazwischen befinden / und der tiefste Ordner.

Ich habe in Google und in Foren gesucht, konnte aber nichts schlüssiges finden. Ich habe gelesen, dass das HFS + -Dateisystem, das ich verwende, keine Tiefenbegrenzung hat, aber vielleicht gibt es eine Begrenzung in der Länge des Pfadnamens?

EDIT: Jemand versucht es fs auffüllen aber es ist eine schmutzige Lösung ... Ich hätte gerne eine "sauberere", wenn möglich. In der Tat wäre es ausreichend, die maximale Tiefe meines aktuellen Systems zu finden, ohne die Grenzen zu testen.

Danke für Ihre Hilfe !

achedeuzot
quelle
Beachten Sie, dass der verknüpfte Beitrag den tiefsten bestimmt möglich Pfad. Sie scheinen nach dem längsten tatsächlich vorhandenen Pfad zu fragen.
Daniel Beck
Ja, ich frage nach dem längsten tatsächlich vorhandenen Pfad. Dieser Link war das einzige, was ich bei Google gefunden habe und ungefähr das, was ich suchte.
achedeuzot

Antworten:

2

Im Folgenden wird das gesamte Dateisystem durchsucht, indem nur nach Verzeichnissen gesucht wird. Dabei wird alles entfernt, was kein Schrägstrich (Pfadbegrenzer) ist, und der längste Pfad wird gedruckt (zumindest in meinem System hängt das Sortierverhalten vom Gebietsschema ab).

find / -type d | sed 's|[^/]||g' | sort | tail -n1

Zählen Sie die resultierenden Schrägstriche. Dies ist einer für jedes Verzeichnis außer root, also der tiefste Verzeichnispfad /Users/danielbeckwäre das Ergebnis //. Natürlich können sich Dateien in diesem Verzeichnis befinden.

Daniel Beck
quelle
Ja. das ist besser. :-)
Sirex
Großartig, ich habe es geschafft ////////////////////////// wenn jemand interessiert ist (das sind 26 Ordner tief).
achedeuzot
1

Beyogen auf Daniel Beck Antwort aber für diejenigen, die gerne Maschinen zählen

find / -type d | sed 's|[^/]||g' | sort | tail -n1 | egrep -i -o / | wc -l

Wenn der tiefste Verzeichnispfad war /Users/danielbeckwäre das Ergebnis 2

Jack.L
quelle
0

einfachster Weg ?

mkdir /a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a

dein tiefstes dir ist jetzt das.

weniger einfacher Weg? Wahrscheinlich so etwas wie:

for i in `find .`; do echo $i | tr -d -c '/\n' | wc -m >> /tmp/counts; done; sort -nr /tmp/counts | head -n 1

Das heißt: Alle Dateipfade anzeigen. Rippt alles aus, was nicht / ist. Zählen Sie, wie viele es waren, und zeigen Sie dann die höchste Zahl an.

Etwas in der Art - Sie können es gerne verbessern, ziemlich sicher, dass die Datei / tmp mit einer Art In-Memory-Datei vermieden werden kann.

Sirex
quelle
Als ich es ausprobierte, hörte es irgendwie nach einiger Zeit auf und reagierte nicht mehr ... Danke für die Idee!
achedeuzot
Dies wird unterbrochen, wenn ein Pfad ein Leerzeichen in seinem Namen enthält. Parsen Sie nicht die Ausgabe von find oder ls: mywiki.wooledge.org/ParsingLs
slhck
Ja, das ist scheiße. Ich kenne. Ich persönlich würde einfach das mkdir machen und mich dem nächsten Problem zuwenden.
Sirex