我使用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和查找文件。
答案 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)
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$