Ermitteln Sie die Gesamtgröße bestimmter Dateien innerhalb eines Verzeichniszweigs

Ermitteln Sie die Gesamtgröße bestimmter Dateien innerhalb eines Verzeichniszweigs

Angenommen, es gibt ein Bildspeicherverzeichnis, sagen wir ./photos/john_doe, in dem sich mehrere Unterverzeichnisse befinden, in denen sich viele bestimmte Dateien befinden (sagen wir *.jpg). Wie kann ich eine Gesamtgröße dieser Dateien unterhalb des john_doeZweigs berechnen?

Ich habe es versucht du -hs ./photos/john_doe/*/*.jpg, aber hier werden nur einzelne Dateien angezeigt. Außerdem wird hier nur die erste Verschachtelungsebene des john_doeVerzeichnisses verfolgt, wie auch john_doe/june/, aber es wird übersprungen john_doe/june/outrageous/.

Wie kann ich also den gesamten Zweig durchlaufen und die Größe bestimmter Dateien zusammenfassen?

Antwort1

find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$

Wenn aufgrund einer sehr langen Dateiliste mehr als ein Aufruf duerforderlich ist, werden mehrere Gesamtsummen gemeldet und müssen summiert werden.

Antwort2

du -ch public_html/images/*.jpg | grep total
20M total

gibt mir die Gesamtnutzung meiner .jpgDateien in diesem Verzeichnis.

Um mit mehreren Verzeichnissen umgehen zu können, müssten Sie dies wahrscheinlich findirgendwie kombinieren.

Vielleicht finden SieBeispiele für den Befehl „du“nützlich (es beinhaltet auch find)

Antwort3

In erster Linie benötigen Sie zwei Dinge:

  • die -cOption du, ihm mitzuteilen, dass eine Gesamtsumme ermittelt werden soll;
  • entweder **(Aktivierungsanleitung) oder find(Beispiel) oder zum Durchsuchen von Unterverzeichnissen.
du -ch -- **/*.jpg | tail -n 1

Antwort4

Die bisherigen Antworten berücksichtigen nicht, dass die von find an du übergebene Dateiliste so lang sein kann, dass find die Liste automatisch in Abschnitte aufteilt, was zu mehreren Vorkommen von führt total.

Sie können entweder grep total(Gebietsschema!) manuell auswählen und zusammenfassen oder einen anderen Befehl verwenden. Soweit ich weiß, gibt es nur zwei Möglichkeiten, die Gesamtsumme (in Kilobyte) aller von find gefundenen Dateien zu erhalten:
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'

Erklärung
find . -type f -iname '*.jpg' -print0: Findet alle Dateien mit der Endung jpg, unabhängig von Groß- und Kleinschreibung (also *.jpg, *.JPG, *.Jpg...) und gebt sie aus (nullterminiert).
xargs -r0 du -a: -r: Xargs würde den Befehl auch ohne übergebene Argumente aufrufen, was -r verhindert. -0 bedeutet nullterminierte Strings (nicht durch Zeilenumbruch terminiert).
awk '{sum+=$1} END {print sum}': Summiert die vom vorigen Befehl ausgegebenen Dateigrößen

Und als Referenz: Der andere Weg wäre
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-

verwandte Informationen