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


0

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

这是代码:

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,但状态为“失败”,因为变量“ $ oversizeFiles”的值为2。我检查了磁盘上的文件大小,其中2个文件为1.1MB。为什么会有这种差异?我应该如何修改脚本,以便生成准确的报告?

顺便说一句,我在Mac上。

这是我的Mac OSX上的“查找”手册页:

-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)

Answers:


2

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

find -size +1M

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

要查找所有大于1.0 MB(1,000,000字节)的文件,请改用此文件:

find -size +1000000c

实际上,由于大小已舍入到下一个完整的512字节块,因此1048065或更多字节。
丹尼尔·贝克

ls认为文件1.0M最大为1101004字节,这比其find最小所需大小1048065大得多(51,7KiB)。–
Daniel Beck

@DanielBeck:我对“大于或等于”是错误的,但是-至少在Ubuntu上-似乎没有取整。我检查了:find -size 1048574c找到一个1048575字节find -size 1M的文件,并找到一个1048577字节的文件。关于您的第二条评论,我不确定我是否检查了磁盘上的文件大小...是指ls
丹尼斯

这个问题与OS X / BSD有关find。解释IIRC数值参数的方式有所不同:所有采用数值参数的基数都允许数字前面带有加号(+)或减号(-)。前面的加号表示大于n,前面的减号表示小于n,均不表示nman find也声明有关-size如果文件的大小(以512字节为单位取整)为n,则为true。如果n后跟ac,则如果文件的大小为n个字节(字符),则primary为true。。第二个cmt仅指示这些值有多少重叠。
丹尼尔·贝克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.