Ich habe eine Datei mit einer Liste von Dateien, deren Gesamtgröße ich wissen möchte. Gibt es einen Befehl dazu?
Mein Betriebssystem ist ein sehr einfaches Linux (Qnap TS-410).
BEARBEITEN:
Ein paar Zeilen aus der Akte:
/ share / archive / Bailey Test / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1 Version 1.tga
/ share / archive / Bailey 2 / BD007 / example.tga
Antworten:
Ich glaube so etwas würde in busybox funktionieren:
Ich habe nicht die gleiche Umgebung wie Sie, aber wenn Sie auf Probleme mit Leerzeichen in Dateinamen stoßen, funktioniert auch Folgendes:
Edit 1 :
@stew ist direkt in seinem Post unten, du zeigt die Festplattennutzung und nicht die genaue Dateigröße. Um das Verhalten zu ändern, verwendet busybox das Flag -a. Versuchen Sie also, die
du -a "$file"
genaue Dateigröße zu ermitteln und die Ausgabe / das Verhalten zu vergleichen.quelle
/usr/bin/du: Argument list too long
(fast 80.000 Zeilen in meiner Datei). Ihr zweiter Befehl gibt mir nur eine Eingabeaufforderung, sobald ich die Eingabetaste drücke und auf etwas mehr warte?cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'
. danke mattiascat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'
(dh vor getan).-c
fügt die Zeile "Gesamtgröße" hinzu;tail -1
nimmt die letzte Zeile (mit der Gesamtgröße);cut -f 1
schneidet das Wort "total" aus.quelle
Ich weiß nicht, ob Ihre Linux-Tools dazu in der Lage sind, aber:
Wenn Sie dies tun, setzen die Xargs das Trennzeichen auf ein Newline-Zeichen und du erstellt eine Gesamtsumme für Sie.
Unter http://busybox.net/downloads/BusyBox.html scheint "busybox du" die Option "Gesamtsumme" zu unterstützen, "busybox xargs" unterstützt jedoch keine benutzerdefinierten Begrenzer.
Auch hier bin ich mir nicht sicher, was dein Toolset angeht.
quelle
xargs: invalid option -- d
-c
da xargs mehrere Aufrufedu
ausführt , wenn die Dateiliste lang genug ist und mehreredu
Summen erzeugt.Dies ähnelt der Lösung von Mattias Ahnberg. Die Verwendung von "read" umgeht Probleme mit Dateinamen / Verzeichnissen mit Leerzeichen. Ich benutze
stat
stattdessendu
, um die Dateigröße zu bekommen. du erhält die Menge an Speicherplatz auf der Festplatte anstelle der Dateigröße, die möglicherweise unterschiedlich ist. Abhängig von Ihrem Dateisystem belegt eine 1-Byte-Datei immer noch 4 KB Festplattenspeicher (oder unabhängig von der Blockgröße). Also für eine 1-Byte-Datei sagt stat 1 Byte und du sagt 4k.quelle
stat
Befehl nicht:stat: command not found
stat: applet not found
in diesem FallHier ist eine andere Lösung für das Problem:
quelle
du -bc
läuft das viel schneller.Versuchen Sie so etwas:
So gehen Sie richtig mit Leerzeichen in Pfaden um:
quelle
find
?find
anstelle der echtenfind
Binärdatei eine reduzierte Busybox verwendet wird .cat docs.txt | xargs -d \\n du -sk | awk '{total+=$1} END{print total}'
quelle