Solusi 1:
Saya yakin hal seperti ini akan berhasil di busybox:
du `cat filelist.txt` | awk '{i+=$1} END {print i}'
Saya tidak memiliki lingkungan yang sama dengan Anda, tetapi jika Anda mengalami masalah dengan spasi dalam nama file, hal seperti ini juga akan berhasil:
cat filelist.txt | while read file;do
du "$file"
done | awk '{i+=$1} END {print i}'
Edit 1 :
@stew tepat di posnya di bawah, du menunjukkan penggunaan disk dan bukan ukuran file yang tepat. Untuk mengubah perilaku busybox gunakan flag -a, jadi cobalah:du -a "$file"
untuk ukuran file yang tepat dan bandingkan keluaran/perilaku.
Solusi 2:
du -c `cat filelist.txt` | tail -1 | cut -f 1
-c
menambahkan baris "ukuran total";
tail -1
mengambil baris terakhir (dengan ukuran total);
cut -f 1
potong kata "total".
Solusi 3:
Saya tidak tahu apakah alat linux Anda mampu melakukan ini, tetapi:
cat /tmp/filelist.txt |xargs -d \\n du -c
Lakukan, xargs akan menyetel pembatas menjadi karakter baris baru, dan du akan menghasilkan total keseluruhan untuk Anda.
Melihat http://busybox.net/downloads/BusyBox.html tampaknya "busybox du" akan mendukung opsi grand total, tetapi "busybox xargs" tidak akan mendukung pembatas khusus.
Sekali lagi, saya tidak yakin dengan perangkat Anda.
Solusi 4:
while read filename ; do stat -c '%s' $filename ; done < filelist.txt | awk '{total+=$1} END {print total}'
Ini mirip dengan solusi Mattias Ahnberg. Menggunakan "baca" mengatasi masalah dengan nama file/direktori dengan spasi. Saya menggunakan stat
bukannya du
untuk mendapatkan ukuran file. du mendapatkan jumlah ruang yang digunakannya pada disk alih-alih ukuran file, yang mungkin berbeda. Bergantung pada sistem file Anda, file 1 byte masih akan menempati 4k pada disk (atau apa pun ukuran bloknya). Jadi untuk file 1 byte, stat mengatakan 1 byte dan du mengatakan 4k.
Solusi 5:
Berikut solusi lain untuk masalah ini:
cat filelist.txt | tr '\n' '\0' | wc -c --files0-from=-