GNU/Linux >> Znalost Linux >  >> Linux

Získejte celkovou velikost souborů ze souboru obsahujícího seznam souborů

Ř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=-

Linux
  1. Skript / příkaz pro získání IPS ze seznamu názvů hostitelů a sloučení do jednoho souboru?

  2. Jak zobrazit velikost/podrobnosti souboru z příkazu ls v Unixu

  3. Jak rozeznat binární soubory od textových souborů v linuxu

  1. Iterujte seznam souborů s mezerami

  2. Vyloučit seznam souborů z hledání

  3. Jak zobrazit seznam nedávno smazaných souborů z adresáře?

  1. Jak přesunout 100 souborů ze složky obsahující tisíce?

  2. Lum – sloučení sloupců ze dvou samostatných souborů?

  3. Jak získat fyzickou velikost souboru v Linuxu?