我想运行以下命令。
查找 .-mtime -60s
当我这样做时,我得到的是这个输出:
CLIENT% echo `date +%s`-1308741881 | bc
5152
CLIENT% find . -mtime -`echo `date +%s`-1308741881 | bc`s
-1308741881: Command not found.
find: -mtime: -date: illegal time value
CLIENT%
这里发生了什么?
答案1
问题是 ' 标记用于表示应该在命令中替换其输出的命令......所以您的命令实际上是三个命令:
- “回声”(包含在第一组 1 分中)
- “-1308741881 | bc”(包含在第二组 1 分中)
- 查找 . -mtime -命令 #1 的输出日期 +%s命令 #2 的输出
命令 #1 不输出任何内容,而命令 #2 导致“未找到命令”错误,因为-1308741881不是有效命令,则不输出任何内容。
然后最后运行第三个命令,使用这些替换,如下所示:
find . -mtime -date
由于“-date”不是有效时间,它也会抱怨,说“非法时间值”
根本问题是您尝试使用嵌套的 `` 标记,但 shell 将其解释为两个单独的命令。
表达你想要什么的更好的方法是这样的(对于 bash):
find . -mtime -$(echo $(date +%s-1308741881) | bc)s
对于 csh:
set now=`date +%s-1308741881`; set date=`echo $now | bc`s; find . -mtime -$date
也可能适用于其他 shell(未经测试):
NOW=`date +%s-1308741881`; DATE=`echo $NOW | bc`; find . -mtime -${DATE}s
PS 我认为这并没有达到您的预期...您的 date 命令返回的是秒数,但 -mtime 需要输入天数。我猜您可能需要相应地调整您的 date 命令。