Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix中,将10天以前的文件压缩到一个文件夹中的脚本?_Unix - Fatal编程技术网

在unix中,将10天以前的文件压缩到一个文件夹中的脚本?

在unix中,将10天以前的文件压缩到一个文件夹中的脚本?,unix,Unix,我试图在UNIX服务器中使用“zip”命令压缩日志文件。 但是我想在10天前自动压缩文件,而不用手动更改命令。任何人都可以建议将10天以前的文件压缩到一个文件夹中的脚本。您可以使用command和zip命令,如下所示 find . -name '*.log' -mtime +10 | zip logfiles.zip -@ 另一种选择: find . -iname '*.log' -mtime +9 -exec zip logfiles.zip {} + 您可能希望使用zip的-m选项,该选

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

您可以使用command和zip命令,如下所示

find . -name '*.log' -mtime +10 | zip logfiles.zip -@
另一种选择:

find . -iname '*.log' -mtime +9 -exec zip logfiles.zip {} +
您可能希望使用zip的
-m
选项,该选项将在压缩日志后删除日志

find . -iname '*.log' -mtime +9 -exec zip -m logfiles.zip {} +
它是如何工作的?

查找。
将查找当前目录中开始的文件

-iname'*.log'
过滤以.log、.log、.log等结尾的文件

-mtime+9
将选择至少在今天9天前(即:10天前)修改的文件

-exec zip-m logfiles.zip{}+
将运行zip-m logfiles.zip文件1文件2文件3。。。等等

zip-m file.zip文件
将文件压缩到file.zip并删除文件

其他一些选项

您可能希望多次运行此脚本,因此可以为日志文件使用一个变量,例如以mm.dd.yyyy格式表示的日期:

find . -iname '*.log' -mtime +9 -exec zip -m logfiles-$(date +%m.%d.%Y).zip {} + 
如果您只想使用当前目录(而不是其子目录)的日志,可以使用find:

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命令将针对在其中查找文件的每个子目录执行

因此:

将给您留下:

app1/logs/logfiles.zip --> (contains log1 and log2 from app1/log)
app2/logs/logfiles.zip --> (contains log1 and log2 from app2/log)
app1/logs/logfiles.zip --> (contains log1 and log2 from app1/log)
app2/logs/logfiles.zip --> (contains log1 and log2 from app2/log)