我正在使用find命令来获取特定时间之间的文件,并使用以下命令对其进行压缩,

  find /lag/cnn -max-depth 3 -newermt "2013-12-19 00:00" -o -type f -newermt "2013-12-16 00:00" -print0 |
   xargs -0 tar acf out.tar.gz

但是当我运行此命令时,得到:查找:无效谓词`-newermt'。问题是什么?以及我该如何解决。

更新:
我实际上想做的是
路径是(使用ls -lrt/lag/cnn/*/*):
        /lag/cnn/Example1/one/a.tar.gz
        /lag/cnn/Example1/two/a.tar.gz
        /lag/cnn/Example1/three/a.tar.gz
         /lag/cnn/Example2/one/a.tar.gz

我在Example1中使用grep,并在sample.txt中获得了如下列表,
        /lag/cnn/Example1/one/a.tar.gz
       /lag/cnn/Example1/two/a.tar.gz
       /lag/cnn/Example1/three/a.tar.gz

从这个sample.txt我想基于时间tar文件。因为触摸不适用于文件。我选择了find command.thing是我需要从根目录执行此操作。
          touch /lag/cnn/*/* start -d "2013-12-19 00:00"

肯定无法正常工作。因此,有什么方法可以在特定时间读取文件并压缩它,或者如何使用此操作使用-newer并在特定时间查找文件。

最佳答案

您的find版本不支持-newermt谓词,因此您不能使用它。解决方法是,可以使用-newer谓词。该谓词需要一个文件作为引用:它将使用文件的修改日期而不是绝对修改日期。您可以为此创建适当的“标记文件”,例如:

touch /tmp/mark.start -d "2013-12-19 00:00"
touch /tmp/mark.end -d "2013-12-16 00:00"

然后使用-newer谓词重写:
find /some/path -newer /tmp/mark.start

顺便说一句,看来您的条件是错误的:您有两次-newermt和不同的日期,在您的示例中,这将使所有文件都比较早的日期更新,而忽略了较新的日期。也许您想做这样的事情:
find /some/path -newer /tmp/mark.start ! -newer /tmp/mark.end

最后,如果参数列表太长且tar拆分为多个执行,则xargs将无法工作,因为所有执行都会重新创建tar文件。您需要使用-Ttar标志代替xargs:
find /some/path -print0 | tar acf out.tar.gz --null -T-

07-24 09:29