Kann ein Baum verwendet werden, um die Anzahl der Dateien pro Ebene aufzulisten?

Kann ein Baum verwendet werden, um die Anzahl der Dateien pro Ebene aufzulisten?

Ich muss in ein bestimmtes Verzeichnis schauen und die Anzahl der Dateien pro Ebene auflisten. Das Verzeichnis ist ziemlich groß, etwa 10-15 Ebenen tief. Wenn ich beispielsweise Folgendes habe:

D1
|
|-- D2A (5 files in this directory)
|    |-- D3A (6 files in this directory)
|    |-- D3B (7 Files in this directory)
|
|-- D2B (1 file in this directory)

Dann sollte es mir sagen, dass Ebene 3 13 Dateien und Ebene 2 6 Dateien hat (oder 6+13, ist egal). Kann Treedas erreicht werden? Ich habe versucht, die Optionen zu mischen, aber es scheint nicht zu funktionieren.

Antwort1

find . -type d | \
perl -ne 'BEGIN{ sub cnt{ $file=shift; $c="find $file -maxdepth 1 -type f | wc -l";int(`$c`) }} chomp; printf "%s %s\n", $_, cnt($_)' | \
perl -ne '/^(.*) (\d*)$/; $_{scalar(split /\//, $1)}+=$2; END { printf "Depth %d has %d files.\n", @$_ for map { [$_,$_{$_}] } sort keys %_ }'

Ergebnisse:

Depth 1 has 7 files.
Depth 2 has 2353 files.
Depth 3 has 2558 files.
Depth 4 has 8242 files.
Depth 5 has 6452 files.
Depth 6 has 674 files.
Depth 7 has 1112 files.
Depth 8 has 64 files.
Depth 9 has 154 files.

Antwort2

Ich bezweifle, dass treedies möglich ist. findKann jedoch:

find . -mindepth 3 -maxdepth 3 -type f | wc -l

würde die Anzahl der Dateien auf Ebene 3 zurückgeben.

Antwort3

tree | sed 's/ //g;s/`/\|/g;s/-.*//g' | sort | uniq -c | grep \|

Ergebnisse:

     35 |
    186 ||
   1408 |||
    691 ||||

Das Pipe-Zeichen (|) gibt die Tiefe an.

verwandte Informationen