使用BASH命令将字符串7.3M转换为字节

时间:2013-02-13 02:50:38

标签: bash

我正在尝试根据一个参数来查找文件,该参数可以包含7.4M这样的值,但是看起来我不能使用它:

FileSize=7.4M
find . -size $FileSize

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

3 个答案:

答案 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;你可能从一个报告了近似值的程序中获得了这个大小。