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

标签 linux unix find aix

我正在将一些脚本从 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 -iinterval 声明为整型变量。当您为 interval 赋值时,shell 会执行算术运算,因此 interval 设置为 2555。这只适用于 ksh 和 bash,不适用于普通 sh。

关于linux - 使用 find 选项和 -mtime +7*365 得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522666/

相关文章:

java - 无法从 opencv 处理 unix 上的图像,但相同的程序可在 windows 上运行

unix - lsof FD 列等于DEL,是什么意思?

Python:在列表中查找

c - 为什么这个程序打印 "forked!"4 次?

linux - 多尾 UNIX

c++ - 在 vector 中找到最长的 'consecutive numbers' 条纹的最快方法是什么?

replace - 在 Dart 中查找和替换字符串

python - 使用 Python 调整 Gnome

linux munmap 不工作(或者至少不能立即工作)

linux - 如何使用 AWK 或 Sed 在 x 个单词后插入换行符\n