Rekursives Zählen von Dateien in einem Linux-Verzeichnis


728

Wie kann ich Dateien in einem Linux-Verzeichnis rekursiv zählen?

Ich habe das gefunden:

find DIR_NAME -type f ¦ wc -l

Wenn ich dies ausführe, wird der folgende Fehler zurückgegeben.

find: Pfade müssen vor dem Ausdruck stehen: ¦


64
Sie verwechseln den unterbrochenen Balken ¦(ASCII 166) mit dem vertikalen Balken |(ASCII 124), der für die UNIX-Pipeline verwendet wird .
Skippy le Grand Gourou

7
@ SkippyleGrandGourou Heißt es nicht eine Pfeife?
DaveStephens

27
@ DaveStephens Ja, das nennt man auch so. Es wird auch als Sheffer-Strich, Verti-Bar, Vbar, Stick, vertikale Linie, vertikaler Schrägstrich, Bar, Obelisk, Glidus bezeichnet.
Emlai

64
@zenith Ich nenne es einfach Bob.
Christopher

15
In RFC20 heißt es "vertikale Linie". "Pipe" ist der Name des Shell-Operators und nicht der Name des Symbols. Genau wie *das ASCII-Zeichen "Stern", aber "Zeiten" in einigen anderen Kontexten.
schlank

Antworten:


1327

Das sollte funktionieren:

find DIR_NAME -type f | wc -l

Erläuterung:

  • -type f nur Dateien einschließen.
  • |( und nicht¦ ) leitet finddie Standardausgabe des wcBefehls zur Standardeingabe des Befehls um.
  • wc(Abkürzung für Word Count) zählt Zeilenumbrüche, Wörter und Bytes in seiner Eingabe ( docs ).
  • -l nur Zeilenumbrüche zählen.

Anmerkungen:

  • Ersetzen DIR_NAMEdurch ., um den Befehl im aktuellen Ordner auszuführen.
  • Sie können auch die -type fVerzeichnisse (und Symlinks) entfernen , um sie in die Zählung aufzunehmen.
  • Es ist möglich, dass dieser Befehl überzählt, wenn Dateinamen Zeilenumbrüche enthalten können.

Erklärung, warum Ihr Beispiel nicht funktioniert:

In dem Befehl, den Sie angezeigt haben, verwenden Sie nicht die "Pipe" ( |), um zwei Befehle zu verbinden, sondern die unterbrochene Leiste ( ¦), die die Shell nicht als Befehl oder ähnliches erkennt. Deshalb erhalten Sie diese Fehlermeldung.


27
Das fIn -type fsteht für Dateien und wc -lfür Wortzählzeilen.
Serge Stroobandt

3
Entfernen Sie die -type fVerzeichnisse, um sie in die Zählung aufzunehmen
phatblat

3
Es gibt keine Notwendigkeit für die -printFlagge
Zoltán

3
Wenn die Möglichkeit besteht, dass Dateinamen das Zeilenumbruchzeichen enthalten, möchten Sie möglicherweise das -print0Flag verwenden.
Gaboroncancio

2
@gaboroncancio Das wird nicht helfen, es sei denn, eine Implementierung von wchat die Option, eine nullterminierte Liste zu lesen. Siehe meine Antwort für eine Alternative.
Setzen Sie Monica bitte

100

Für das aktuelle Verzeichnis:

find -type f | wc -l

5
Diese Lösung berücksichtigt keine Dateinamen, die Zeilenumbrüche enthalten.
Kusalananda

2
Für das aktuelle Verzeichnis benötigen Sie nicht einmal die.
Taufe

1
Eigentlich auf einigen Plattformen, Sie tun müssen , um buchstabierenfind .
tripleee

1
@Kusalanandra Ihr Kommentar gilt für fast jede Antwort hier.
Tripleee

69

Wenn Sie eine Aufschlüsselung der Anzahl der Dateien in jedem Verzeichnis unter Ihrem aktuellen Verzeichnis wünschen:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

Das kann natürlich alles in einer Zeile gehen. Die Klammern verdeutlichen, wessen Ausgabe wc -l( find $i -type fin diesem Fall) überwacht werden soll .


7
Es könnte in Verzeichnissen mit Leerzeichen in ihren Namen hängen bleiben. Ändern der ersten Zeile, um das find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' i ; doProblem zu beheben. Siehe Wie kann ich eine Datei (Datenstrom, Variable) Zeile für Zeile (und / oder Feld für Feld) lesen?
Arch Stanton

4
Die Verwendung findfür die äußere Schleife ist nur eine unnötige Komplikation. for i in */;; do`
Tripleee

Funktion countit {für i in $ (find. -maxdepth 1 -type d); do file_count = $ (finde $ i-Typ f | wc -l); echo "$ file_count: $ i"; erledigt }; countit | sort -n -r
Schneems

Endlich ist es das, was ich brauchte. Meine Ordner haben Tausende von Dateien, so dass das Drucken mit Baum oder irgendetwas anderem keine Option ist
lesolorzanov

Dies schließt ../ ein und scheint nicht vorwärts zu gehen - was bedeutet, dass es nicht regressiv ist.
Daniel Lefebvre

50

Sie können verwenden

$ tree

nach der Installation des Tree- Pakets mit

$ sudo apt-get install tree

(auf einem Debian / Mint / Ubuntu Linux-Computer).

Der Befehl zeigt nicht nur die Anzahl der Dateien, sondern auch die Anzahl der Verzeichnisse separat an. Mit der Option -L kann die maximale Anzeigeebene angegeben werden (die standardmäßig die maximale Tiefe des Verzeichnisbaums ist).

Mit der -aOption können auch ausgeblendete Dateien eingefügt werden.


4
Dies ist der einfachste Weg, um die Anzahl der Verzeichnisse und Dateien anzuzeigen.
Lorem Ipsum Dolor

11
Über die Manpage: Standardmäßig druckt der Baum keine versteckten Dateien . Sie müssen die -aOption angeben, um sie einzuschließen.
eee

3
Um dies unter macOS zu installieren, verwenden Sie es brewund führen Sie es aus brew install tree, vorzugsweise nach dem Ausführen brew update.
Ashish Ahuja

4
Es werden auch alle Dateinamen gedruckt, sodass es langsam ist, wenn Sie viele Dateien haben.
Franck Dernoncourt

2
Wow, sehr schönes Tool, es kann Ordner farbig drucken, nur Ordner auflisten, als JSON ausgeben. In wenigen Sekunden können 34.000 Ordner und 51.000 Dateien aufgelistet werden. Olé!
Brasofilo

46

Auf meinem Computer rsyncist ein bisschen schneller als find | wc -lin der akzeptierten Antwort:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

Die zweite Zeile enthält die Anzahl der Dateien, im obigen Beispiel 150.481. Als Bonus erhalten Sie auch die Gesamtgröße (in Bytes).

Bemerkungen:

  • Die erste Zeile enthält eine Anzahl von Dateien, Verzeichnissen, Symlinks usw. zusammen. Deshalb ist sie größer als die zweite Zeile.
  • die --dry-run(oder-n kurz gesagt) Option ist wichtig, um die Dateien nicht tatsächlich zu übertragen!
  • Ich habe die -xOption verwendet, um "Dateisystemgrenzen nicht zu überschreiten". Wenn Sie sie ausführen /und externe Festplatten angeschlossen haben, werden nur die Dateien auf der Root-Partition gezählt.

Ich mag Ihre Idee, hier rsync zu verwenden. Ich hätte nie darüber nachgedacht!
Qeole

Danke @Qeole, die Idee ist aber nicht meine. Ich habe es vor einigen Jahren irgendwo gelesen, dass rsync am schnellsten einen Ordner mit vielen Dateien und Unterordnern löscht, daher dachte ich, es könnte schnell gehen, auch Dateien zu zählen.
Schmied

1
Versuchte dies. Nachdem beide zuvor zweimal ausgeführt wurden, um den fs-Cache zu füllen, find ~ -type f | wc -ldauerte es 1,7 / 0,5 / 1,33 Sekunden (real / user / sys). rsync --stats --dry-run -ax ~ /xxxdauerte 4,4 / 3,1 / 2,1 Sekunden. Das sind ungefähr 500.000 Dateien auf SSD.
schlank

Keine Ahnung, welche Version von rsync Sie verwendet haben, aber in 3.1.2 ist es etwas einfacher zu lesen:Number of files: 487 (reg: 295, dir: 192)
mpen

Ich habe die Standardeinstellung rsync unter macOS verwendet:rsync version 2.6.9 protocol version 29
psmith

20

Da Dateinamen in UNIX möglicherweise Zeilenumbrüche enthalten (ja, Zeilenumbrüche), werden wc -lmöglicherweise zu viele Dateien gezählt. Ich würde für jede Datei einen Punkt drucken und dann die Punkte zählen:

find DIR_NAME -type f -printf "." | wc -c

1
Sieht so aus, als wäre dies die einzige Lösung, die Dateien mit Zeilenumbrüchen im Namen verarbeitet. Upvoted.
Codeforester

2
hihi :) Ich liebe Zeilenumbrüche in Dateinamen. Das macht sie nur lesbarer.
hek2mgl

Ich meine, neue Zeilen in den Dateinamen nicht der Inhalt!
Codeforester

1
Ich habe nur Spaß gemacht ... Ja, Zeilenumbrüche in Dateinamen müssen immer berücksichtigt werden. Sie könnten von böswilligen oder weniger spektakulären Inhalten stammen, von Tippfehlern.
hek2mgl

18

Wenn Sie einige der Antworten hier zusammenfassen, scheint die nützlichste Lösung zu sein:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

Es kann seltsame Dinge wie Dateinamen verarbeiten, die Leerzeichen in Klammern und sogar neue Zeilen enthalten. Außerdem wird die Ausgabe nach der Anzahl der Dateien sortiert.

Sie können die Anzahl nach erhöhen -maxdepth, um auch Unterverzeichnisse zu zählen. Beachten Sie, dass dies möglicherweise lange dauern kann, insbesondere wenn Sie eine stark verschachtelte Verzeichnisstruktur in Kombination mit einer hohen -maxdepthAnzahl haben.


Was ist mit dem echo -e? Ich denke, Sie setzen es ein, um alle Zeilenumbrüche zu falten, aber es wird auch jedes andere unregelmäßige Leerzeichen entstellen und versuchen, alle in den Dateinamen wörtlich vorhandenen Platzhalterzeichen zu erweitern. Ich würde einfach mit so etwas anfangen find .* * -type d -execdir sh -c 'find . -type f -printf "\n" | wc -l; pwd'und mit Aberrationen in der Ausgabe leben oder vielleicht mit Bashs spielen, printf "%q"um den Verzeichnisnamen zu drucken.
Tripleee

10

Wenn Sie wissen möchten, wie viele Dateien und Unterverzeichnisse aus dem aktuellen Arbeitsverzeichnis vorhanden sind, können Sie diesen Einzeiler verwenden

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

Dies funktioniert in der GNU-Variante und lässt das -e im Echo-Befehl für BSD Linux (z. B. OSX) einfach weg.


2
Hervorragende Lösung! Das einzige Problem, das ich fand, waren Verzeichnisse mit Leerzeichen oder Sonderzeichen. Fügen Sie Anführungszeichen hinzu, in denen der Verzeichnisname verwendet wird:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find "{}" | wc -l) "{}"' | sort -n
John Kary

1
Ich habe es ein wenig modifiziert und es funktioniert ganz gut für mich:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} | wc -l) \\t {}' | sort -rn | less
Wizek

Meine Kommentare zu @ Sebastians Antwort gelten auch hier. Die Verwendung echo -e(oder nur "Echo" wie im vorhergehenden Kommentar) eines nicht zitierten Verzeichnisnamens tauscht ein Problem gegen ein anderes aus.
Tripleee

8

Wenn Sie Fehlerfälle vermeiden möchten, lassen Sie dies nicht zu wc -l Fehlerfälle Dateien mit Zeilenumbrüchen anzeigen (die als 2+ Dateien gelten).

Beispiel: Stellen Sie sich einen Fall vor, in dem eine einzelne Datei mit einem einzelnen EOL-Zeichen enthalten ist

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

Da gnu zumindest wckeine Option zum Lesen / Zählen einer nullterminierten Liste (außer aus einer Datei) zu haben scheint, besteht die einfachste Lösung darin, die Dateinamen nicht zu übergeben, sondern jedes Mal eine statische Ausgabe, wenn eine Datei gefunden wird, z im selben Verzeichnis wie oben

> find -type f -exec printf '\n' \; | wc -l
1

Oder wenn Sie es findunterstützen

> find -type f -printf '\n' | wc -l
1 

7

Sie können den Befehl verwenden ncdu. Es wird rekursiv gezählt, wie viele Dateien ein Linux-Verzeichnis enthält. Hier ist ein Beispiel für die Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Es hat einen Fortschrittsbalken, der praktisch ist, wenn Sie viele Dateien haben:

Geben Sie hier die Bildbeschreibung ein

So installieren Sie es unter Ubuntu:

sudo apt-get install -y ncdu

Benchmark: Ich habe https://archive.org/details/cv_corpus_v1.tar (380390 Dateien, 11 GB) als Ordner verwendet, in dem die Anzahl der Dateien gezählt werden muss.

  • find . -type f | wc -l: ca. 1m20s zu vervollständigen
  • ncdu: ca. 1m20s zu vervollständigen

Das berechnet hauptsächlich die Festplattennutzung, nicht die Anzahl der Dateien. Dieser zusätzliche Aufwand ist wahrscheinlich nicht erwünscht. (Abgesehen von der Notwendigkeit, ein zusätzliches Paket für etwas zu installieren, das mit Standard-POSIX-Dienstprogrammen ausgeführt werden kann)
hek2mgl

@ hek2mgl Berechnet die Anzahl der Dateien, wie im ersten Screenshot rot dargestellt. Ich habe ein paar Minuten für ~ 2 Millionen Dateien gebraucht, daher ist die Geschwindigkeit nicht schlecht.
Franck Dernoncourt

2
@ hek2mgl Ich habe der Antwort einen reproduzierbaren Benchmark hinzugefügt, ihn zweimal ausgeführt und keinen Unterschied zwischen find . -type f | wc -lund festgestellt ncdu.
Franck Dernoncourt

2
Ja, es sieht so aus, als ob findunter der Haube mehr oder weniger dieselben Systemaufrufe ausgeführt werden, für dudie das Backend bestimmt ist ncdu. Einfach gespannt.
hek2mgl

1
@FranckDernoncourt hat es geliebt. Ich habe eine Menge Dateien in einem Ordner und eine Fortschrittsanzeige ist lebensrettend. Danke für das Teilen!
Geek


4

Geben Sie ein, um festzustellen, wie viele Dateien sich im aktuellen Verzeichnis befinden ls -1 | wc -l. Dies wird verwendet wc, um die Anzahl der Zeilen (-l)in der Ausgabe von zu zählen ls -1. Dotfiles werden nicht gezählt. Bitte beachte, dassls -l (das ist ein "L" anstelle einer "1" wie in den vorherigen Beispielen), die ich in früheren Versionen dieses HOWTO verwendet habe, Ihnen tatsächlich eine Dateianzahl gibt, die um eins größer ist als die tatsächliche Anzahl. Vielen Dank an Kam Nejad für diesen Punkt.

Wenn Sie nur Dateien zählen und KEINE symbolischen Links einfügen möchten (nur ein Beispiel dafür, was Sie sonst noch tun könnten), können Sie dies verwenden ls -l | grep -v ^l | wc -l(diesmal ist dies ein "L", keine "1", wir möchten hier eine "lange" Auflistung). . grepsucht nach Zeilen, die mit "l" beginnen (was auf einen Link hinweist), und verwirft diese Zeile (-v).

Relative Geschwindigkeit: "ls -1 / usr / bin / | wc -l" dauert auf einem entladenen 486SX25 ungefähr 1,03 Sekunden (/ usr / bin / auf diesem Computer hat 355 Dateien). ""ls -l /usr/bin/ | grep -v ^l | wc -l " dauert etwa 1,19 Sekunden.

Quelle: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


2
ls -lmuss statsyscall für jede Datei ausführen, um ihre Größe, mtime und andere Eigenschaften zu lesen, was langsam ist. In großen Verzeichnissen (über 100.000 Dateien) ls -lkann die Ausführung einige Minuten dauern. Um also nur Dateien zu zählen, verwenden Sie immer ls -1 | wc -l.
Marki555

A 486SX25, nice
cam8001

ls -1kann in großen Verzeichnissen immer noch langsam sein, da die Dateien sortiert werden müssen. Tut einfach printf '%s\n' *das Gleiche und vermeidet den externen lsAufruf (der sowieso problematisch ist ), aber die effizienteste Lösung besteht darin, einen Befehl zu verwenden, der keine Sortierung durchführt, wie z find. (Die Glob-Ausgabe ist nach der Shell sortiert.)
Tripleee

4

Wenn Sie einen bestimmten Dateityp rekursiv zählen müssen , können Sie Folgendes tun:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l dient nur zur Anzeige der Anzahl der Zeilen in der Ausgabe.


Die Erweiterung ist Teil des Dateinamens und repräsentiert möglicherweise nicht die Datei TYPE
Waxhead

4

Mit Bash:

Erstellen Sie ein Array von Einträgen mit () und erhalten Sie die Anzahl mit #.

FILES=(./*); echo ${#FILES[@]}

Ok, das zählt Dateien nicht rekursiv, aber ich wollte zuerst die einfache Option zeigen. Ein häufiger Anwendungsfall kann das Erstellen von Rollover-Sicherungen einer Datei sein. Dadurch werden logfile.1, logfile.2, logfile.3 usw. erstellt.

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

Rekursive Zählung mit globstaraktiviertem Bash 4+ (wie von @tripleee erwähnt)

FILES=(**/*); echo ${#FILES[@]}

Um die Anzahl der Dateien rekursiv zu ermitteln, können wir find weiterhin auf die gleiche Weise verwenden.

FILES=(`find . -type f`); echo ${#FILES[@]}

Moderne Shells unterstützen die **/*rekursive Aufzählung. Es ist immer noch weniger effizient als findbei großen Verzeichnissen, da die Shell die Dateien in jedem Verzeichnis sortieren muss.
Tripleee

2

Für Verzeichnisse mit Leerzeichen im Namen ... (basierend auf verschiedenen Antworten oben) - Drucken Sie den Verzeichnisnamen rekursiv mit der Anzahl der Dateien in:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

Beispiel (zur besseren Lesbarkeit formatiert):

pwd
  /mnt/Vancouver/Programming/scripts/claws/corpus

ls -l
  total 8
  drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
  drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'

ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
  138

## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
  29

Die Verzeichnisstruktur wird besser visualisiert mit tree:

tree -L 3 -F .
  .
  ├── Catabolism - Autophagy; Phagosomes; Mitophagy/
  │   ├── 1
  │   ├── 10
  │   ├── [ ... SNIP! (138 files, total) ... ]
  │   ├── 98
  │   └── 99
  └── Catabolism - Lysosomes/
      ├── 1
      ├── 10
      ├── [ ... SNIP! (28 files, total) ... ]
      ├── 8
      ├── 9
      └── aaa/
          └── bbb

  3 directories, 167 files

man find | grep mindep
  -mindepth levels
    Do not apply any tests or actions at levels less than levels
    (a non-negative integer).  -mindepth 1 means process all files
    except the starting-points.

ls -p | grep -v /(unten verwendet) stammt aus Antwort 2 unter /unix/48492/list-only-regular-files-but-not-directories-in-current-directory

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

Anwendung: Ich möchte die maximale Anzahl von Dateien unter mehreren hundert Verzeichnissen finden (alle Tiefe = 1) [Ausgabe unten zur besseren Lesbarkeit erneut formatiert]:

date; pwd
    Fri Mar 29 20:08:08 PDT 2019
    /home/victoria/Mail/2_RESEARCH - NEWS

time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
    0:00.03

[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
    ./RNA - Exosomes: 26
    ./Cellular Signaling - Receptors: 213
    ./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
    ./Stress - Physiological, Cellular - General: 261
    ./Ancient DNA; Ancient Protein: 34

[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)

    0: ./Genomics - Gene Drive
    1: ./Causality; Causal Relationships
    1: ./Cloning
    1: ./GenMAPP 2
    1: ./Pathway Interaction Database
    1: ./Wasps
    2: ./Cellular Signaling - Ras-MAPK Pathway
    2: ./Cell Death - Ferroptosis
    2: ./Diet - Apples
    2: ./Environment - Waste Management

    988: ./Genomics - PPM (Personalized & Precision Medicine)
    1113: ./Microbes - Pathogens, Parasites
    1418: ./Health - Female
    1420: ./Immunity, Inflammation - General
    1522: ./Science, Research - Miscellaneous
    1797: ./Genomics
    1910: ./Neuroscience, Neurobiology
    2740: ./Genomics - Functional
    3943: ./Cancer
    4375: ./Health - Disease 

sort -Vist eine natürliche Sorte. ... Meine maximale Anzahl von Dateien in einem dieser Verzeichnisse (Claws Mail) beträgt 4375 Dateien. Wenn ich diese Dateinamen - https://stackoverflow.com/a/55409116/1904943 ) mit dem linken Pad ( https://stackoverflow.com/a/55409116/1904943 ) - sie werden alle numerisch benannt, beginnend mit 1 in jedem Verzeichnis - und mit insgesamt 5 Ziffern auffülle, sollte ich in Ordnung sein .


Nachtrag

Suchen Sie die Gesamtzahl der Dateien und Unterverzeichnisse in einem Verzeichnis.

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS

$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News

Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine

$ find . -type f | wc -l
70214    ## files

$ find . -type d | wc -l
417      ## subdirectories

1

Ich habe ffcnt geschrieben , um die rekursive unter bestimmten Umständen zu beschleunigen: Rotationsdisketten und Dateisysteme, die die Extent-Zuordnung unterstützen.

Es kann eine Größenordnung schneller sein als lsoder findbasierend auf Ansätzen, aber YMMV.


0

Hier gibt es viele richtige Antworten. Hier ist ein anderes!

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

Wo .ist der Ordner, in dem gesucht werden soll, und 10die Anzahl der Zeichen, nach denen das Verzeichnis gruppiert werden soll.


-1

find -type f | wc -l

ODER (Wenn das Verzeichnis das aktuelle Verzeichnis ist)

finden . -Typ f | wc -l


Dies dupliziert mindestens eine weitere Antwort auf dieselbe Frage.
Kusalananda

-1

Dies wird völlig gut funktionieren. Einfach kurz. Wenn Sie die Anzahl der in einem Ordner vorhandenen Dateien zählen möchten.

ls | wc -l

3
Dies beantwortet zunächst nicht die Frage. Die Frage betrifft das rekursive Zählen von Dateien aus einem Verzeichnis vorwärts, und der angezeigte Befehl führt dies nicht aus. Außerdem zählen Sie mit ls sowohl Verzeichnisse als auch Dateien. Es gibt auch keinen Grund, eine alte Frage zu beantworten, wenn Sie nichts Neues hinzufügen und die Frage nicht einmal richtig lesen. Bitte unterlassen Sie dies.
XFCC

-1

Dieser alternative Ansatz mit Filterung nach Format zählt alle verfügbaren Grub-Kernel-Module:

ls -l /boot/grub/*.mod | wc -l

-3
ls -l | grep -e -x -e -dr | wc -l 
  1. lange Liste
  2. Filtern Sie Dateien und Verzeichnisse
  3. Zählen Sie die gefilterte Zeile Nr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.