解決策 1:
次のようなものがビジーボックスで機能すると思います:
du `cat filelist.txt` | awk '{i+=$1} END {print i}'
私はあなたと同じ環境ではありませんが、ファイル名にスペースが含まれる問題が発生した場合は、次のような方法でも機能します:
cat filelist.txt | while read file;do
du "$file"
done | awk '{i+=$1} END {print i}'
編集 1 :
@stew は彼の投稿の下にあります。du は正確なファイルサイズではなく、ディスクの使用状況を示しています。 busybox の動作を変更するには、-a フラグを使用します。次を試してください:du -a "$file"
正確なファイルサイズを確認し、出力/動作を比較してください。
解決策 2:
du -c `cat filelist.txt` | tail -1 | cut -f 1
-c
行「合計サイズ」を追加します。
tail -1
最後の行 (合計サイズ) を取得します。
cut -f 1
「合計」という単語を切り取ります。
解決策 3:
お使いの Linux ツールがこれに対応しているかどうかはわかりませんが、
cat /tmp/filelist.txt |xargs -d \\n du -c
xargs は区切り文字を改行文字に設定し、du は総計を生成します。
http://busybox.net/downloads/BusyBox.html を見ると、「busybox du」は総計オプションをサポートしているようですが、「busybox xargs」はカスタム区切り文字をサポートしていないようです。
繰り返しますが、あなたのツールセットはよくわかりません.
解決策 4:
while read filename ; do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'
これは Mattias Ahnberg のソリューションに似ています。 「読み取り」を使用すると、スペースを含むファイル名/ディレクトリの問題を回避できます。 stat
を使用しています du
の代わりに ファイルサイズを取得します。 du は、ファイルサイズではなく、ディスク上で使用している容量を取得しています。これは異なる場合があります。ファイルシステムによっては、1 バイトのファイルがディスク上で 4k (またはブロックサイズが何であれ) を占有します。したがって、1 バイトのファイルの場合、stat は 1 バイトを示し、du は 4k を示します。
解決策 5:
この問題に対する別の解決策は次のとおりです:
cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-