我正在将一些脚本从 AIX 移动到 RHEL,并且我发现了以下格式的 find 命令:
find -mtime +7*365
有人经历过像上面这样的语法吗?
用 2555 替换 7*365 会得到不同的结果。是的,我无法追踪该脚本的原始创建者来亲自询问。
编辑: 我忘记了“+”号,抱歉。 我重点关注 -mtime 值的乘法,但完整的命令是
find /path/ -mtime +7*365 -name 'SOME_NAME*.*'
最佳答案
首先,如果当前目录中存在名称以 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。
关于linux - 使用 find 选项和 -mtime +7*365 得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522666/