ファイルサイズだけを取得したい場合、ls -l
とcut
もしくはawk
を組み合わせて取得する方法が真っ先に思い浮かぶ。
$ ls -l test.txt | cut -d' ' -f5
3104
$ ls -l test.txt | awk '{print $5}'
3104
コマンドを組み合わせなくても、ファイルサイズをbyte単位で取得するには、wc -c < ファイル
だけでできる。wc -c ファイル
だとファイル名が出力されてしまうが、標準入力から渡してあげるとファイル名が出力されない。
$ wc -c test.txt
3104 test.txt
$ wc -c < test.txt
3104
cat
でファイルを開いてパイプでwc -c
につないでも同じ出力が得られるが、パイプを挟むと処理性能が全く異なる。小さなファイルであれば問題ないが、大きなgzファイルのサイズを取得するときはパイプでつながないようにした方がいい。
$ ls -lh mysqldump.dmp.gz | awk '{print $5}'
5.5G
$ time wc -c < mysqldump.dmp.gz
5898101831
real 0m0.001s
user 0m0.000s
sys 0m0.000s
$ time cat mysqldump.dmp.gz | wc -c
5898101831
real 1m3.347s
user 0m0.207s
sys 0m4.358s
同様にwc -l < ファイル
でファイル名を出力せずにファイルの行数が取得できる。