【问题标题】:Find and remove files in multiple directories在多个目录中查找和删除文件
【发布时间】:2016-12-02 03:25:31
【问题描述】:

现在我有一个 cron 作业,每周运行一次,为我查找和删除在那段时间积累的文件。它是这样的:

find $DIR1 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7 >> /tmp/file.txt

但是,我想在服务器上的另一个目录中做同样的事情(必须是 $DIR1 和 $DIR2 - 在整个系统中从根目录进行查找是不可行的)但我觉得在重复命令时会起作用,但会很丑陋、多余且效率低下。

所以,我想以某种方式构建一个列表(即 FILES="file1 file2 file3"),并采用一种简化的方法来检查两个目录,然后将找到的结果输出到上面的文本文件中。

我不确定如何执行此操作 - 我曾想过可能会执行一个循环,但这似乎太基本了。任何人都可以在这里给我一根骨头并指出我正确的方向吗?我担心的最重要的事情是让它与 find 一起工作。

编辑:澄清一下,在 $DIR2 中的第二次搜索是针对超过 14 天 (mtime +14) 的文件,因此仅将 $DIR2 添加到现有字符串中是行不通的。

谢谢!

【问题讨论】:

    标签: bash centos command-line-interface


    【解决方案1】:

    你试过了吗:

    find $DIR1 $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7 >> /tmp/file.txt
    

    【讨论】:

    • 哦,对了,我应该指定 - 第二次搜索需要 14 天,所以据我所知,简单地将 $DIR2 附加到同一命令中是行不通的,因为我只能搜索7 天或 14 天,但不能同时在同一个字符串中。
    • 在这种情况下,我认为两个 find 命令将是最有效的。否则,您将搜索超过 7 天的文件并剔除在 DIR2 中发现的误报
    【解决方案2】:

    编写 bash 脚本(即 delete_files.sh)并在 crontab 中添加 bash 脚本会容易得多。所以下一次,如果你想添加更多不同目录的模式,那么你只需要在 bash 脚本中编写,它会自动添加到 cronjob 中。

    #!/usr/bin/bash
    
    echo $(find $DIR1 $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;
    

    #!/usr/bin/bash
    
    echo $(find $DIR1 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;
    echo $(find $DIR2 -maxdepth 1 \( -name \file1-\* -o -name \*file2-\* \) -mtime +7) >> /tmp/file.txt;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2019-02-11
      • 1970-01-01
      • 2016-02-23
      相关资源
      最近更新 更多