GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Holen Sie sich die Gesamtdateigröße aus einer Datei, die eine Dateiliste enthält

Lösung 1:

Ich glaube, so etwas würde in busybox funktionieren:

du `cat filelist.txt` | awk '{i+=$1} END {print i}'

Ich habe nicht die gleiche Umgebung wie Sie, aber wenn Sie Probleme mit Leerzeichen in Dateinamen haben, würde so etwas auch funktionieren:

cat filelist.txt | while read file;do
  du "$file"
done | awk '{i+=$1} END {print i}'

Bearbeiten 1 :
@stew steht direkt in seinem Beitrag unten, du zeigt die Festplattennutzung und nicht die genaue Dateigröße. Um das Verhalten zu ändern, verwendet busybox das Flag -a, also versuchen Sie es mit:du -a "$file" für die genaue Dateigröße und vergleichen Sie die Ausgabe/das Verhalten.

Lösung 2:

du -c `cat filelist.txt` | tail -1 | cut -f 1

-c fügt Zeile "Gesamtgröße" hinzu;
tail -1 nimmt letzte Zeile (mit Gesamtgröße);
cut -f 1 schneidet das Wort "total" aus.

Lösung 3:

Ich weiß nicht, ob Ihre Linux-Tools dazu in der Lage sind, aber:

cat /tmp/filelist.txt  |xargs -d \\n du -c

Do, xargs setzt das Trennzeichen auf ein Zeilenumbruchzeichen, und du erzeugt eine Gesamtsumme für Sie.

Wenn Sie sich http://busybox.net/downloads/BusyBox.html ansehen, scheint es, dass "busybox du" die Gesamtsummenoption unterstützt, aber "busybox xargs" keine benutzerdefinierten Trennzeichen unterstützt.

Auch hier bin ich mir Ihres Toolsets nicht sicher.

Lösung 4:

while read filename ;  do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'

Dies ähnelt der Lösung von Mattias Ahnberg. Die Verwendung von "read" umgeht Probleme mit Dateinamen/Verzeichnissen mit Leerzeichen. Ich verwende stat statt du um die Dateigröße zu erhalten. du erhält die Menge an Speicherplatz, die es auf der Festplatte verwendet, anstelle der Dateigröße, die unterschiedlich sein kann. Abhängig von Ihrem Dateisystem belegt eine 1-Byte-Datei immer noch 4 KB auf der Festplatte (oder was auch immer die Blockgröße ist). Für eine 1-Byte-Datei sagt stat also 1 Byte und du sagt 4k.

Lösung 5:

Hier ist eine weitere Lösung für das Problem:

cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-

Linux
  1. Wie verschiebt man 100 Dateien aus einem Ordner mit Tausenden?

  2. Lum – Spalten aus zwei separaten Dateien zusammenführen?

  3. Die Größe einer Remote-Datei vom Terminal abrufen?

  4. Listen Sie die Gesamtgröße der Festplattennutzung von Dateien nach Verzeichnissen / Ordnern in Linux auf

  5. Iterieren Sie über eine Liste von Dateien mit Leerzeichen

Ls-Befehl in Linux (Dateien und Verzeichnisse auflisten)

Wie listet man alle Dateien in Linux nach Größe sortiert auf?

Dateiliste von der Suche ausschließen

Wie listet man kürzlich gelöschte Dateien aus einem Verzeichnis auf?

Wie bekomme ich Elemente aus der Liste in Bash?

Wie kann ich eine Binärdatei aus einer .py-Datei erhalten?