1097 Stimmen

Rekursives Zählen von Dateien in einem Linux-Verzeichnis

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: ¦

2voto

Parag Jain Punkte 524

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

2voto

SauloAlessandre Punkte 585

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

2voto

the8472 Punkte 37966

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.

2voto

pufferfish Punkte 15359

Hier gibt es viele richtige Antworten. Hier ist eine weitere!

find . -type f | sort | uniq -w 10 -c

donde . ist der Ordner, in dem Sie suchen müssen, und 10 ist die Anzahl der Zeichen, nach denen das Verzeichnis gruppiert werden soll.

0voto

mlemanczyk Punkte 121

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

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.

Powered by:

X