オペレーティングシステム全体でファイルサイズを確認するより簡単な方法を探しています。 wc -cを使用できますが、大容量ファイルに与えるパフォーマンスの影響が心配されます。 (文字数だけを計算し、後で統計を実行しないとしますか?)
以下はLinuxとmacos(そしておそらくbsd)で動作します。良いパフォーマンスを持つより簡単な方法はありますか?
function filesize
{
local file=$1
size=`stat -c %s $file 2>/dev/null` # linux
if [ $? -eq 0 ]; then
echo $size
return 0
fi
eval $(stat -s $file) # macos
if [ $? -eq 0 ]; then
echo $st_size
return 0
fi
echo 0
return -1
}
ベストアンサー1
wc
GNU coreutilsのソースcoreutils/src/wc.c
(つまり、組み込まれていないLinuxとCygwinのバージョン)から:
When counting only bytes, save some line- and word-counting
overhead. If FD is a 'regular' Unix file, using lseek is enough
to get its 'size' in bytes.
したがって、wc -c
バイト数を使用するとうまくいきます。
大容量ファイル(読み取りに時間がかかるファイルなど)でこの最適化を簡単にテストできます。 9.9Gbファイルは私のサーバーwc -c
でリアルタイムで0.015秒かかりました。その時点でファイル全体を転送できると嬉しいですが、残念ながら私のギガビットイーサネット速度はそうではありません。/dev/null
ネットワーク)。