ファイルサイズだけを取得したい場合、ls -lcutもしくは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 < ファイルでファイル名を出力せずにファイルの行数が取得できる。