在命令行上,“find”报告非法时间值

在命令行上,“find”报告非法时间值

我想运行以下命令。

查找 .-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. “回声”(包含在第一组 1 分中)
  2. “-1308741881 | bc”(包含在第二组 1 分中)
  3. 查找 . -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 命令。

相关内容