对于备份脚本,我需要清理旧备份。如何保留最后N个备份并删除其余备份?
备份是单个文件夹或单个文件,脚本会将所有备份保留在文件夹或文件中(不混合)。
如果可能的话,我想avoid parsing of the output of ls
.即使备份文件夹中的所有条目都应该由备份脚本创建,并且条目名称中不应该有任何有趣的字符,黑客也许能够在那里创建新条目。
答案 0 :(得分:1)
这应该这样做(未经测试!):
#!/usr/bin/env bash
set -o errexit -o noclobber -o nounset -o pipefail
i=0
max=7 # Could be anything you want
while IFS= read -r -d '' -u 9
do
let ++i
if [ "$i" -gt "$max" ]
then
rm -- "$REPLY"
fi
done 9< <(find /var/backup -type f -maxdepth 1 -regex '.*/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.tar\.gz' -print0 | sort -rz)
从外面解释:
YYYY-MM-DD.tar.gz
格式的/ var / backup(和 not 子目录)中的所有文件。cat
,ssh
或其他默认读取标准输入的程序出现任何问题。