合計ファイルサイズを知りたいファイルのリストを含むファイルがあります。そうするコマンドはありますか?
私のOSは非常に基本的なLinux(Qnap TS-410)です。
編集:
ファイルから数行:
/ share / archive / Bailey Test / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1バージョン1.tga
/ share / archive / Bailey 2 / BD007 / example.tga
合計ファイルサイズを知りたいファイルのリストを含むファイルがあります。そうするコマンドはありますか?
私のOSは非常に基本的なLinux(Qnap TS-410)です。
編集:
ファイルから数行:
/ share / archive / Bailey Test / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1バージョン1.tga
/ share / archive / Bailey 2 / BD007 / example.tga
回答:
私はbusyboxでこのようなことがうまくいくと信じています:
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"ます。正確なファイルサイズを求めて、出力/動作を比較してください。
/usr/bin/du: Argument list too long(私のファイルではほぼ80,000行)。2番目のコマンドは、Enterキーを押すとプロンプトを表示し、さらに何かを待っていますか?
cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'です。おかげでマティアス
cat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'つまり、実行前)。
du -c `cat filelist.txt` | tail -1 | cut -f 1
-c行「合計サイズ」を追加します。
tail -1最後の行を取ります(合計サイズ)。
cut -f 1単語「total」を切り取ります。
あなたのLinuxツールがこれに対応しているかどうかはわかりませんが、:
cat /tmp/filelist.txt |xargs -d \\n du -c
実行すると、xargsは区切り文字を改行文字に設定し、duは総計を生成します。
http://busybox.net/downloads/BusyBox.htmlを見ると、「busybox du」は総計オプションをサポートしているようですが、「busybox xargs」はカスタム区切り文字をサポートしていません。
繰り返しますが、ツールセットについてはわかりません。
xargs: invalid option -- d
-cxargsはduファイルリストが十分に長い場合に複数の呼び出しを行い、いくつかのdu合計を生成するため、除外することもできます。
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を示します。
statコマンドを:stat: command not found
stat: applet not foundこの場合に言う
次のようなものを試してください:
$ cat filelist.txt | xargs ls -l | awk '{x+=$5} END {print "total bytes: " x}'
パス内のスペースを適切に処理するには:
$ find /path/to/files -type f -print0 | xargs -0 ls -l | awk '{x+=$5} END {print "total bytes: " x}'
findか?
findは、実際のfindバイナリの代わりにbusyboxの削除されたものを使用しているためです。