Nei*_*ill 4 bash shell-script files
我正在寻找一种更简单的方法来进行跨操作系统的 unix 文件大小检查。我可以使用 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
}
Run Code Online (Sandbox Code Playgroud)
来自GNU coreutils中wc
( 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.
Run Code Online (Sandbox Code Playgroud)
所以使用wc -c
来计算字节会表现得很好。
您可以在一个大文件(即需要一些时间阅读的文件)上轻松测试此优化。wc -c
在一个 9.9Gb 的文件上,我的服务器上的一个文件需要 0.015 秒的实时时间,如果整个文件都在那个时候传输,我会很高兴,但不幸的是,我的千兆以太网并没有那么快(需要 21 秒才能传输)将该文件复制到/dev/null
网络上)。