我正在使用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'.问题是什么?以及我如何解决这个问题.
更新:我实际上要做的是,路径是(使用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.s的tar文件.由于触摸不适用于文件.我选择了find命令.我需要从根目录执行此操作.
touch /lag/cnn/*/* start -d "2013-12-19 00:00"
不会肯定的.那么有没有办法在特定时间和tar之间读取文件或如何使用此触摸使用-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
文件.您需要使用-T
标志tar
而不是xargs
:
find /some/path -print0 | tar acf out.tar.gz --null -T-