【问题标题】:Different results with find option and -mtime +7*365find 选项和 -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*.*'

【问题讨论】:

    标签: linux unix find aix


    【解决方案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 -iinterval 声明为整数变量。当您为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 返回相同的答案,那就是草率的解析器!
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2014-10-25
    相关资源
    最近更新 更多