Linux 使用shell脚本的内务管理报告

Linux 使用shell脚本的内务管理报告,linux,shell,unix,ubuntu,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/repo

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

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

/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天”时间不同,该怎么办

您可以使用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

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

$ 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
您可以在后台运行每个查找(&),或者使用文件中的顺序作为搜索和删除文件的顺序