如何使用linux shell脚本为超过7天的文件创buildtar文件

我正在编写shell脚本来备份超过7天的文件。 这是我的代码。 但我没有得到预期的结果。 任何人都可以纠正我?

#!/bin/bash # Backup files files=($(find /var/log/ -mtime +"7")) for files in ${files[*]} do echo $files tar cvfz backup.tar.gz $files done 

Solutions Collecting From Web of "如何使用linux shell脚本为超过7天的文件创buildtar文件"

循环会导致问题。 这将工作:

 #!/bin/bash files=($(find /var/log/ -mtime +7)) tar cvfz backup.tar.gz "${files[@]}" 

注意使用"${files[@]}"而不是${files[*]}"${files[@]}"将展开,为每个文件名提供一个参数的tar ,即使文件名包含空格,制表符或换行符也可以工作。 相反,在shell展开${files[*]} ,它将执行分词,可能会损坏文件名。

所有由find /var/log/ -mtime +7命令生成的目录都将包含在tar文件中。 要只包括文件,而不包括目录,请参阅天网的答案。

从最近七天存档日志

只有一个角色需要改变:

 #!/bin/bash files=($(find /var/log/ -mtime -7)) tar cvfz backup.tar.gz "${files[@]}" 

这工作,因为find解释数值参数如下:

数字参数可以指定为
+ n大于n,
-n小于n,
正好n。

因此, -mtime +7表示大于7天,而-mtime -7表示小于7.注意, find将忽略小数部分。 因此+7将包括8天但不是7.5天。 详见man find

用这个替换你的find命令然后再试一次,

 find /var/log -type f -mtime +7