find:使用-newermt时无效的谓词

时间:2013-12-21 06:17:32

标签: linux command

我使用find命令在一定时间之间获取文件,并使用以下命令对其进行tar,

  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:invalid predicate`-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

我在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我希望基于time的tar文件。因为触摸不能对文件起作用。我选择了find命令。我需要从根目录执行此操作。

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

无法确定无效。那么有没有办法在特定时间和tar之间读取文件或如何使用此触摸在一定时间内使用-newer和查找文件。

2 个答案:

答案 0 :(得分:8)

您的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文件。您需要使用-T的{​​{1}}标记,而不是tar

xargs

答案 1 :(得分:1)

查找比" start"更新的文件超过"结束"

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

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

输出:

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

./d

./b

./c

-bash-3.2$