【问题标题】:Housekeeping reports with shell script使用 shell 脚本的内务管理报告
【发布时间】:2014-12-08 05:52:36
【问题描述】:

我正在使用一个应用程序,该应用程序每半小时创建一次新报告,并且需要进行内务处理以清除文件。

创建不同类型的报告并保存在目录中,如下所示:

/home/myapp/reports/report1/
/home/myapp/reports/report2/
/home/myapp/reports/report3/
/home/myapp/reports/report4/

在上述所有目录中,需要维护和删除早于 3 天的文件。而不是为每个目录编写一行脚本,例如

find /home/myapp/reports/report1/ -type f -mtime +3 -delete
find /home/myapp/reports/report2/ -type f -mtime +3 -delete
find /home/myapp/reports/report3/ -type f -mtime +3 -delete

有没有一种方法可以编写一个通用的方法来支持未来的其他类型的报告以及上述报告?这会是什么样子?如果每种报告类型的早于天数不同,而不是所有的天数都不同,该怎么办?

【问题讨论】:

    标签: linux shell unix ubuntu


    【解决方案1】:

    您可以使用 glob 来包含所有这些:

    find /home/myapp/reports/report*/ -type f -mtime +3 -delete
    

    如果您需要为不同的目录设置不同的天数,您最简单的解决方案通常是创建不同命名的目录。例如,要保留三份每日和每周报告:

    find /home/myapp/reports/daily/report*/ -type f -mtime +3 -delete
    find /home/myapp/reports/weekly/report*/ -type f -mtime +21 -delete
    

    【讨论】:

      【解决方案2】:

      您可以创建一个文件列出每个目录和到期日期,例如,

      $ cat /home/myapp/etc/report-cleanup.csv
      /home/myapp/reports/report1/ 3
      /home/myapp/reports/report2/ 7
      /home/myapp/reports/report3/ 5
      /home/myapp/reports/daily/ 3
      /home/myapp/reports/weekly/ 21
      ...
      

      然后让您的脚本读取每一行并单独处理,

      $ cat /home/myapp/util/report-cleanup.sh
      #!/bin/bash
      config="/home/myapp/etc/report-cleanup.csv"
      cat $config |while read dir expire; do
          echo "path: $dir, expire: $expire"
          find $dir -type f -mtime +$expire -delete
      end
      

      您可以在后台运行每个查找 (&),或使用文件中的排序作为搜索和删除文件的顺序。

      【讨论】:

        猜你喜欢
        • 2012-06-19
        • 2015-01-23
        • 1970-01-01
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多