通过使用ls -lh
我们可以获得文件大小。
有什么方法可以检查文件大小是否大于 1MB,然后打印如下消息?我可能有不同大小的文件,例如 100mb、1gb、10gb、100kb。
if [ $FileSize > 1MB ];
then
echo "File size is grater than 1MB"
fi
有没有办法使用if
语句检查文件大小?
答案1
find
在以下位置的特定文件上使用$filepath
:
if [ -n "$(find "$filepath" -prune -size +1000000c)" ]; then
printf '%s is strictly larger than 1 MB\n' "$filepath"
fi
这用于find
查询特定文件的$filepath
大小。如果大小大于1000000字节,find
将打印文件的路径名,否则将不生成任何内容。-n
如果字符串的长度非零,则测试为 true,在本例中这意味着输出find
了某些内容,这又意味着文件大于 1 MB。
您没有问这个:查找某些文件下所有大于 1 MB 的常规文件$dirpath
,并为每个文件打印一条短消息:
find "$dirpath" -type f -size +1000000c \
-exec printf '%s is larger than 1 MB\n' {} +
这些代码应该可以移植到任何 Unix 上。
另请注意,在测试中使用<
或>
将测试两个涉及的字符串是否按特定的字典顺序排序。这些运算符不进行数值比较。为此,请使用-lt
(“小于”)、-le
(“小于或等于”)、-gt
(“大于”)或-ge
(“大于或等于”)、-eq
(“等于”)或-ne
(“不等于”)。这些运算符进行整数比较。
答案2
如果您想一次查询一个文件,它stat
是一种通用工具,用于查询特定文件的各种属性,包括大小等。
FileName="foo"
FSize=1048576
if [ $(stat -f %z "$FileName") -gt $FSize ]; then
printf "File %s is larger than %d bytes.\n" "$FileName" $FSize
fi
如果您真正寻找的是一种查询大量文件并仅提取超过一定大小的文件的名称的方法,那么find
可能就是您想要的。
给定位于 DIRECTORY 中的一组文件,这将找到大于 FSize 字节的文件:
DIRECTORY="/path/to/your/files"
FSize="1M"
find $DIRECTORY -type f -size +$FSize