1

我正在尝试根据可以采用诸如 7.4M 之类的值的参数查找文件,但似乎我无法使用:

FileSize=7.4M
find . -size $FileSize

这样做会导致“非法尾随字符”

4

3 回答 3

2

问题不是“M”(你可能已经知道了),而是 7.4。数值必须是一个整数,后跟一个可选的缩放值。以下应该有效:

FileSize=7400k
find . -size $FileSize
于 2013-02-13T03:16:33.067 回答
2

也许您可以使用按位运算

FileSize=7
find . -size $(( FileSize << 20 ))
于 2013-02-13T03:02:34.223 回答
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() 的用户可能期望“15.5k”可以工作,但事实并非如此。此外,用户可能期望 7.4M 没有被这个函数四舍五入,但它是(事实上,文件不可能正好是7.4mb,因为 7.4mb = 7759462.4 字节)。

最好遵循 find 的语法,就像 chepner 建议的那样。

此外,在大多数情况下,您可能应该使用类似

find . -size +7M -and -size -8M

查找间隔内的文件(在本例中,在 7mb 和 8mb 之间)。如果开头没有 + 或 -,它将仅查找具有此确切大小的文件。但正如我所说,没有一个文件正好是 7.4mb。您可能从报告近似值的程序中获得此大小。

于 2013-02-13T13:01:15.873 回答