使用find选项和-mtime + 7 * 365获得不同的结果

时间:2019-06-10 08:03:50

标签: linux unix find aix

我正在将一些脚本从AIX移到RHEL,并且发现了以下格式的find命令:

>>> l = ['VDM', 'MDM', 'OM']
>>> l2 = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
>>> [[f'{a}:{b}' for b in c] for a,c in zip(l, l2)]
[['VDM:1', 'VDM:2', 'VDM:3', 'VDM:4', 'VDM:5'], ['MDM:1', 'MDM:2', 'MDM:3', 'MDM:4', 'MDM:5'], ['OM:1', 'OM:2', 'OM:3', 'OM:4', 'OM:5']]
>>> 

有人遇到过像上面这样的语法吗?

用2555替换7 * 365会得到不同的结果。是的,我无法跟踪该脚本的原始创建者亲自询问。

编辑: 抱歉,我忘记了“ +”号。 我专注于-mtime值的乘法,但是完整的命令是

find -mtime +7*365

1 个答案:

答案 0 :(得分:2)

首先,如果当前目录中的文件名称以7开头并以365结尾,则7*365被匹配文件的名称替换)。为了保证find看到7*365,通配符需要受到保护,例如find -mtime '7*365'find -mtime 7\*365

然后,我从未见过接受算术表达式的find实现。只有非十进制的非负整数(GNU find还接受带前导0x的十六进制),并带有可选的前导-+AIX man page表示需要一个“十进制整数”(带有可选的前导-+)。我没有要测试的AIX,但是使用7*365时,我会期望出现错误,或者如果整数解析器非常草率,则可能会将其解析为7或0。

要查找将近7年前修改过的文件,您需要告诉Shell执行算术运算:find -mtime $((7*365))

对您写的起作用起作用的修改版本如下:

typeset -i interval
interval=7*365
find … -mtime "$interval"

它也可以在interval上也没有引号(只要IFS不包含数字)。之所以起作用,是因为typeset -iinterval声明为整数变量。当您为interval分配值时,shell将执行算术运算,因此interval被设置为2555。这仅适用于ksh和bash,不适用于普通sh。