如何使用Linux Shell脚本为7天以上的文件创建tar

我正在编写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

回答:

这将起作用:

#!/bin/bash

files=()

while IFS= read -r -d $'\0'; do

files+=("$REPLY")

done < <(find /var/log/ -mtime +7 -print0)

tar cvfz backup.tar.gz "${files[@]}"

注意使用而"${files[@]}"不是${files[*]}

"${files[@]}"将扩展为tar每个文件名提供一个参数,并且即使文件名包含空格,制表符或换行符也可以使用。相比之下,shell扩展后${files[*]},它将执行分词,可能会破坏您的文件名。

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

存档最近七天的日志

仅需更改一个字符:

#!/bin/bash

files=()

while IFS= read -r -d $'\0'; do

files+=("$REPLY")

done < <(find /var/log/ -mtime -7 -print0)

tar cvfz backup.tar.gz "${files[@]}"

之所以有效,是因为find将数字参数解释如下:

可以将数字参数指定为

+ n表示大于n,

-n表示小于n,

n表示恰好为n。

因此,-mtime +7意味着年龄大于7天,而-mtime

-7意味着小于7天。请注意,find将忽略小数部分。因此+7将包括8天,但不包括7.5天。有关man find详细信息,请参见。

以上是 如何使用Linux Shell脚本为7天以上的文件创建tar 的全部内容, 来源链接: utcz.com/qa/400100.html

回到顶部