如何使用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
