在使用-newermt时发现:无效谓词

我正在使用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 

但是当我运行这个命令得到:find:无效的谓词`-newermt'。 问题是什么? 以及我如何解决这个问题。

更新:我实际上试图做的是,path是(使用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 

我正在使用grep的Example1,并得到了如下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文件基于时间。因为触摸不起作用的文件。 我select了查找command.thing是我需要从根目录做到这一点。

  touch /lag/cnn/*/* start -d "2013-12-19 00:00" 

将无法正常工作。 那么有什么办法可以在一定的时间内读取文件,并将其tar或如何使用此触摸来使用 – 更新和在一定的时间内find文件。

你的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 

顺便说一句,它看起来像你的条件是错的:你有两次不同的日期,在你的例子中会得到所有的文件更新,然后更旧的日期,忽略新的日期。 也许你想这样做,而不是:

 find /some/path -newer /tmp/mark.start ! -newer /tmp/mark.end 

最后,如果参数列表太长, xargs分裂为多个执行,那么您的tar将不会工作,因为所有的执行都会重新创建tar文件。 您需要使用tar-T标志而不是xargs

 find /some/path -print0 | tar acf out.tar.gz --null -T- 

查找比“开始”更早且比“结束”更早的文件

 touch /tmp/mark.start -d "2016-02-16 00:00" touch a -d "2016-02-15 00:01" touch b -d "2016-02-16 00:01" touch c -d "2016-02-17 00:00" touch d -d "2016-02-18 00:00" touch e -d "2016-02-19 00:01" touch /tmp/mark.end -d "2016-02-19 00:00" 

命令: find . -type f -newer /tmp/mark.start ! -newer /tmp/mark.end find . -type f -newer /tmp/mark.start ! -newer /tmp/mark.end

================================================== ======================

输出:

 -bash-3.2$ find . -type f -newer /tmp/mark.start ! -newer /tmp/mark.end ./d ./b ./c -bash-3.2$