在unix中的一个文件夹中用10天的文件压缩文件的脚本?

时间:2013-12-10 09:22:43

标签: unix

我正在尝试使用UNIX服务器中的“zip”命令压缩日志文件。 但我想自动压缩文件前10天,而不是手动更改命令。任何人都可以建议使用10天的文件在一个文件夹中压缩文件的脚本。

2 个答案:

答案 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)