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
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
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.
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.