如何使用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/bashfiles=()
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/bashfiles=()
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