我正在使用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
但是当我运行此命令时,得到:查找:无效谓词`-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我想基于时间tar文件。因为触摸不适用于文件。我选择了find command.thing是我需要从根目录执行此操作。
touch /lag/cnn/*/* start -d "2013-12-19 00:00"
肯定无法正常工作。因此,有什么方法可以在特定时间读取文件并压缩它,或者如何使用此操作使用-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-