Wie kann ich Dateien in einem Linux-Verzeichnis rekursiv zählen?
Ich habe dies gefunden:
find DIR_NAME -type f ¦ wc -l
Wenn ich dies jedoch ausführe, wird folgende Fehlermeldung angezeigt.
find: Pfade müssen vor dem Ausdruck stehen: ¦
Wie kann ich Dateien in einem Linux-Verzeichnis rekursiv zählen?
Ich habe dies gefunden:
find DIR_NAME -type f ¦ wc -l
Wenn ich dies jedoch ausführe, wird folgende Fehlermeldung angezeigt.
find: Pfade müssen vor dem Ausdruck stehen: ¦
Wir können verwenden Baum werden alle Dateien und Verzeichnisse rekursiv angezeigt. Außerdem wird die Anzahl der Ordner und Dateien in der letzten Zeile der Ausgabe angezeigt.
$ tree path/to/folder/
path/to/folder/
a-first.html
b-second.html
subfolder
readme.html
code.cpp
code.h
z-last-file.html
1 directories, 6 files
Um nur die letzte Zeile der Ausgabe des tree-Befehls zu erhalten, können wir den tail-Befehl für die Ausgabe verwenden
$ tree path/to/folder/ | tail -1
1 directories, 6 files
Für die Installation des Baums können wir folgenden Befehl verwenden
$ sudo apt-get install tree
Ich habe geschrieben ffcnt um die rekursive Dateizählung unter bestimmten Umständen zu beschleunigen: rotierende Festplatten und Dateisysteme, die Extent-Mapping unterstützen.
Sie kann um eine Größenordnung schneller sein als ls
o find
basierte Ansätze, aber das ist Geschmackssache.
Wenn Sie die Gesamtzahl der Dateien pro Verzeichnis ermitteln wollen, versuchen Sie es:
for d in `find YOUR_SUBDIR_HERE -type d`; do
printf "$d - files > "
find $d -type f | wc -l
done
für das aktuelle Verzeichnis versuchen Sie dies:
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done;
wenn Sie lange Raumnamen haben, müssen Sie IFS ändern, etwa so:
OIFS=$IFS; IFS=$'\n'
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done
IFS=$OIFS
Auf der Grundlage der oben gegebenen Antworten und Kommentare habe ich die folgende Auflistung der Dateizahlen erstellt. Insbesondere ist es eine Kombination aus die Lösung bereitgestellt von @Greg Bell, mit Kommentaren von @Arch Stanton & @Schneems
Zählt alle Dateien im aktuellen Verzeichnis und den Unterverzeichnissen
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-count.txt
Zählt alle Dateien mit dem angegebenen Namen im aktuellen Verzeichnis und den Unterverzeichnissen
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | grep <enter_filename_here> | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-with-name-count.txt
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.