带有shell脚本的管家报告

时间:2014-10-13 15:42:33

标签: linux shell unix ubuntu

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

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

/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

有没有办法可以编写一个支持未来其他类型报告以及上述报告的通用报告?这看起来怎么样?如果每种报告类型的天数不同,而不是3天,那该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

$ 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

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