find:使用-newermt时无效的谓词

 小哥 发布于 2023-02-08 18:28

我正在使用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并在特定时间之间查找文件.

1 个回答
  • 您的版本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-
    

    2023-02-08 18:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有