在命令行上,'find' 报告一个非法的时间值

use*_*005 1 linux date find csh

我想运行以下命令。

找 。-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%
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Fli*_*mzy 6

问题是 ` 标记用于表示应该在您的命令中替换输出的命令......所以您的命令实际上是三个命令:

  1. “echo”(包含在第一组 1 标记中)
  2. “-1308741881 | bc”(包含在第二组 1 标记中)
  3. 找 。-mtime -命令输出 #1日期 +%s命令输出 #2

命令 #1 不输出任何内容,命令 #2 导致“找不到命令”错误,因为-1308741881不是有效命令,然后也不输出任何内容。

然后最后第三个命令运行,带有这些替换,看起来像这样:

find . -mtime -date
Run Code Online (Sandbox Code Playgroud)

由于“-date”不是有效时间,它也抱怨说“非法时间值”

潜在的问题是您试图使用嵌套的 `` 标记,shell 将其解释为两个单独的命令。

表达您想要的更好的方法是这样的(对于 bash):

find . -mtime -$(echo $(date +%s-1308741881) | bc)s
Run Code Online (Sandbox Code Playgroud)

而对于 csh:

set now=`date +%s-1308741881`; set date=`echo $now | bc`s; find . -mtime -$date
Run Code Online (Sandbox Code Playgroud)

并且可能用于其他外壳(未经测试):

NOW=`date +%s-1308741881`; DATE=`echo $NOW | bc`; find . -mtime -${DATE}s
Run Code Online (Sandbox Code Playgroud)

PS 我不认为这符合您的期望……您的 date 命令返回了几秒钟,但是 -mtime 需要几天作为输入。我猜你可能想相应地调整你的日期命令。