磁盘上的文件大小与 ls 输出不一致

磁盘上的文件大小与 ls 输出不一致

我有一个脚本,可以检查大于 1MB 的 gzip 文件大小,并将文件及其大小作为报告输出。

这是代码:

myReport=`ls -ltrh "$somePath" | egrep '\.gz$' |  awk '{print $9,"=>",$5}'`
# Count files that exceed 1MB
oversizeFiles=`find "$somePath" -maxdepth 1  -size +1M -iname "*.gz" -print0 | xargs -0 ls -lh | wc -l`

 if [ $oversizeFiles -eq 0 ];then
    status="PASS"

 else
     status="CHECK FAILED. FOUND FILES GREATER THAN 1MB"
 fi

echo -e $status"\n"$myReport

问题是 ls 命令在报告中输出的文件大小为 1.0MB,但状态为“FAIL”,因为“$oversizeFiles”变量的值为 2。我检查了磁盘上的文件大小,发现 2 个文件的大小为 1.1MB。为什么会出现这种差异?我应该如何修改脚本才能生成准确的报告?

顺便说一句,我用的是 Mac。

以下是我的 Mac OSX 上“find”的手册页内容:

-size n[ckMGTP]
True if the file's size, rounded up, in 512-byte blocks is n.  
If n is followed by a c,then the primary is true if the file's size is n bytes (characters).  
Similarly if n is followed by a scale indicator then the file's size is compared to n scaled as:  

 k       kilobytes (1024 bytes)
 M       megabytes (1024 kilobytes)
 G       gigabytes (1024 megabytes)
 T       terabytes (1024 gigabytes)
 P       petabytes (1024 terabytes)

答案1

在 中findM实际上指的是兆字节,而不是兆字节。

find -size +1M

将找到所有大于 1,048,576 字节的文件。

要查找所有大于 1.0 MB(1,000,000 字节)的文件,请使用以下命令:

find -size +1000000c

相关内容