GNU/Linux >> Linux の 問題 >  >> Linux

ファイル リストを含むファイルから合計ファイル サイズを取得する

解決策 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=-

Linux
  1. ホスト名のリストからIpsを取得し、単一のファイルに結合するためのスクリプト/コマンド?

  2. ターミナルでマスクごとにすべてのファイルのリストを取得しますか?

  3. ターミナルからリモートファイルのサイズを取得しますか?

  1. Linuxのディレクトリ/フォルダーごとに合計ファイルのディスク使用サイズを一覧表示する

  2. Unix で ls コマンドからファイル サイズ/詳細を表示する方法

  3. Linuxでテキストファイルからバイナリを見分ける方法

  1. スペースを含むファイルのリストを反復処理する

  2. gitでコミットされていない、または追跡されていないファイルの合計サイズを見つける

  3. .py ファイルからバイナリを取得するにはどうすればよいですか