gpt4 book ai didi

linux - 找到 : invalid predicate when using -newermt

转载 作者:IT王子 更新时间:2023-10-29 00:26:15 26 4
gpt4 key购买 nike

我正在使用查找命令在特定时间之间获取文件并使用以下命令将其压缩,

  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 中根据时间压缩文件。因为触摸对文件不起作用。我选择了查找命令。我需要从根目录执行此操作。

          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

最后,如果参数列表太长并且 xargs 分成多个执行,您的 tar 将无法工作,因为所有执行都将重新创建 tar 文件。您需要使用 tar-T 标志而不是 xargs:

find /some/path -print0 | tar acf out.tar.gz --null -T-

关于linux - 找到 : invalid predicate when using -newermt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com