Řešení 1:
Věřím, že něco takového by fungovalo v busybox:
du `cat filelist.txt` | awk '{i+=$1} END {print i}'
Nemám stejné prostředí jako vy, ale pokud narazíte na problémy s mezerami v názvech souborů, fungovalo by také něco takového:
cat filelist.txt | while read file;do
du "$file"
done | awk '{i+=$1} END {print i}'
Úprava 1 :
@stew má pravdu ve svém příspěvku níže, du ukazuje využití disku a ne přesnou velikost souboru. Chcete-li změnit chování busybox používá parametr -a, zkuste:du -a "$file"
pro přesnou velikost souboru a porovnejte výstup/chování.
Řešení 2:
du -c `cat filelist.txt` | tail -1 | cut -f 1
-c
přidá řádek "celková velikost";
tail -1
vezme poslední řádek (s celkovou velikostí);
cut -f 1
vyškrtne slovo „celkem“.
Řešení 3:
Nevím, jestli to vaše linuxové nástroje umí, ale:
cat /tmp/filelist.txt |xargs -d \\n du -c
Udělejte to, xargs nastaví oddělovač na znak nového řádku a du vám vytvoří celkový součet.
Při pohledu na http://busybox.net/downloads/BusyBox.html se zdá, že "busybox du" bude podporovat možnost celkového součtu, ale "busybox xargs" nebude podporovat vlastní oddělovače.
Znovu opakuji, nejsem si jistý vaší sadou nástrojů.
Řešení 4:
while read filename ; do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'
To je podobné řešení Mattiase Ahnberga. Použití "čtení" řeší problémy s názvy souborů/adresáři s mezerami. Používám stat
místo du
získat velikost souboru. du získává místo na disku místo velikosti souboru, která se může lišit. V závislosti na vašem souborovém systému bude 1bajtový soubor stále zabírat 4 kB na disku (nebo jaká je velikost bloku). Takže pro 1bajtový soubor stat říká 1 byte a du říká 4k.
Řešení 5:
Zde je další řešení problému:
cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-