我正在尝试使用UNIX服务器中的“zip”命令压缩日志文件。 但我想自动压缩文件前10天,而不是手动更改命令。任何人都可以建议使用10天的文件在一个文件夹中压缩文件的脚本。
答案 0 :(得分:1)
您可以使用find命令并使用zip命令执行此操作,如下所示
find . -name '*.log' -mtime +10 | zip logfiles.zip -@
答案 1 :(得分:0)
另一种选择:
find . -iname '*.log' -mtime +9 -exec zip logfiles.zip {} +
您可能希望使用zip的-m
选项,它会在压缩后删除日志。
find . -iname '*.log' -mtime +9 -exec zip -m logfiles.zip {} +
它是如何运作的?
find .
将查找从当前目录开始的文件。
-iname '*.log'
过滤以.log,.LOG,.Log等结尾的文件
-mtime +9
将选择至少在今天前9天修改过的文件,即:10天前。
-exec zip -m logfiles.zip {} +
将运行zip -m logfiles.zip file1 file2 file3 ...依此类推。
zip -m file.zip file
将文件压缩到file.zip并删除文件。
其他一些选项:
您可能希望多次运行此脚本,因此,您可以使用变量作为日志文件,例如以mm.dd.yyyy格式表示的日期:
find . -iname '*.log' -mtime +9 -exec zip -m logfiles-$(date +%m.%d.%Y).zip {} +
如果您只想将日志用于当前目录(而不是它的子目录),则可以使用find的-maxdepth
选项:
find . -maxdepth 1 -iname '*.log' -mtime +9 -exec zip -m logfiles-$(date +%m.%d.%Y).zip {} +
假设你有类似的东西:
app1/logs/log1.log
app1/logs/log2.log
app2/logs/log1.log
app2/logs/log2.log
使用-execdir
(而不是-exec
)将为其找到文件的每个子目录执行zip命令。
所以:
find . -iname '*.log' -mtime +9 -execdir zip -m logfiles.zip {} +
请留下:
app1/logs/logfiles.zip --> (contains log1 and log2 from app1/log)
app2/logs/logfiles.zip --> (contains log1 and log2 from app2/log)