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