我正在尝试根据一个参数来查找文件,该参数可以包含7.4M这样的值,但是看起来我不能使用它:
FileSize=7.4M
find . -size $FileSize
这样做会导致“非法尾随字符”
答案 0 :(得分:2)
也许您可以使用bitwise operation
FileSize=7
find . -size $(( FileSize << 20 ))
答案 1 :(得分:2)
问题不在于“M”(你可能已经知道了),而是7.4。数值必须是整数,后跟可选的缩放值。以下应该有效:
FileSize=7400k
find . -size $FileSize
答案 2 :(得分:0)
我编写了这个函数,将输入规范化为整数:
normalize() { echo "$1" | awk -FM '/M/ { printf "%dk", $1*1024 }; !/M/ { print $1 }'; }
定义此功能后,您可以像这样使用它:
$ echo $(normalize 7.4M)
7577k
$ echo $(normalize 15k)
15k
所以你可以像这样写代码:
find . -size $(normalize $FileSize)
但无论如何我会反对它。在bash中使用这样的语法糖是棘手的,并且是一个小错误的配方。例如,normalize()的用户可能期望&#34; 15.5k&#34;会工作,但它没有。此外,用户可以预期7.4M不会被此函数舍入,但它确实是(实际上文件不能完全 7.4mb,因为7.4mb = 7759462.4字节)
最好遵循查找的语法,就像chepner建议的那样。
此外,对于大多数情况,您可能应该使用类似
的内容find . -size +7M -and -size -8M
查找间隔中的文件(在此示例中,介于7mb和8mb之间)。如果没有+或 - 在开头,它将只找到具有此确切大小的文件。但正如我所说,没有文件正好是7.4mb;你可能从一个报告了近似值的程序中获得了这个大小。