查找选项和 -mtime +7*365 的不同结果
Different results with find option and -mtime +7*365
我正在将一些脚本从 AIX 移动到 RHEL,我发现了以下格式的查找命令:
find -mtime +7*365
有没有人遇到过类似上面的语法?
将 7*365 替换为 2555 会得到不同的结果。是的,我无法追踪该脚本的原始创建者亲自询问。
编辑:
我忘记了一个“+”号,抱歉。
我专注于 -mtime 值的乘法,但完整的命令是
find /path/ -mtime +7*365 -name 'SOME_NAME*.*'
首先,如果当前目录中存在名称以7
开头并以365
结尾的文件,则7*365
被替换为匹配文件的名称(s).为了保证 find
看到 7*365
,需要保护通配符,例如find -mtime '7*365'
或 find -mtime 7\*365
.
那我就没见过接受算术表达式的find实现了。只有一个 non-negative 十进制整数(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.
下无效
我正在将一些脚本从 AIX 移动到 RHEL,我发现了以下格式的查找命令:
find -mtime +7*365
有没有人遇到过类似上面的语法?
将 7*365 替换为 2555 会得到不同的结果。是的,我无法追踪该脚本的原始创建者亲自询问。
编辑: 我忘记了一个“+”号,抱歉。 我专注于 -mtime 值的乘法,但完整的命令是
find /path/ -mtime +7*365 -name 'SOME_NAME*.*'
首先,如果当前目录中存在名称以7
开头并以365
结尾的文件,则7*365
被替换为匹配文件的名称(s).为了保证 find
看到 7*365
,需要保护通配符,例如find -mtime '7*365'
或 find -mtime 7\*365
.
那我就没见过接受算术表达式的find实现了。只有一个 non-negative 十进制整数(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.