find 选项和 -mtime +7*365 的不同结果
Posted
技术标签:
【中文标题】find 选项和 -mtime +7*365 的不同结果【英文标题】:Different results with find option and -mtime +7*365 【发布时间】:2019-10-24 15:13:24 【问题描述】:我正在将一些脚本从 AIX 移动到 RHEL,并且找到了以下格式的 find 命令:
find -mtime +7*365
有没有人遇到过类似上面的语法?
将 7*365 替换为 2555 会得到不同的结果。是的,我无法追踪该脚本的原始创建者来亲自询问。
编辑: 我忘记了一个“+”号,抱歉。 我专注于 -mtime 值的乘法,但完整的命令是
find /path/ -mtime +7*365 -name 'SOME_NAME*.*'
【问题讨论】:
【参考方案1】:首先,如果当前目录中存在名称以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 -i
将interval
声明为整数变量。当您为interval
赋值时,shell 执行算术运算,因此interval
被设置为2555
。这仅适用于 ksh 和 bash,不适用于普通 sh。
【讨论】:
GCC Compile Farm 提供对两台或三台 AIX 机器的访问。考虑到向项目和作者捐赠了多少时间,您可以考虑获得一个帐户。 在GCC119 上,这是运行 AIX 的 Power8,$ find -mtime 7*365
会导致 find: missing argument to `-mtime'
。
find /path/ -mtime +7*365 -name 'SOME_NAME*.*' 在我要移动脚本的源系统上工作得很好
@kibicrealu1 还有超过 2555 天的文件吗?如果旧 AIX 版本有一个草率的解析器,其中 +7*365
被解析为 +7
(列出超过 7 天的文件)或 +0
(列出所有修改时间在过去的文件),我不会感到惊讶.
@Gilles 它似乎和你写的完全一样,非常感谢! +7 & +7*365 返回相同的答案,那就是草率的解析器!以上是关于find 选项和 -mtime +7*365 的不同结果的主要内容,如果未能解决你的问题,请参考以下文章