我的任务是从我们的Linux数据库中删除旧的备份文件(除了最新的3之外)。由于我们有多种备份,因此我必须为每种备份类型留下至少3个备份文件。
我的脚本应该将具有相似(匹配)名称的所有文件组合在一起并删除除最后3个文件之外的所有文件(我假设操作系统将为我排序这些文件,因此最新的备份也将是最后的备份)
文件的格式为project_name.000000-000000.svndmp.bz2
,其中0
可以是任意数字,project_name
可以是任意名称。前6位数字是名称的一部分,而后6位数字描述备份的版本。
到目前为止,我的代码看起来像这样:
for i in *.svndmp.bz2 # only check backup files
do
nOfOccurences = # Need to find out, how many files have the same name
currentFile = 0
for f in awk -F"[.-]" '{print $1,$2}' $i # This doesn't work
do
if [nOfOccurences - $currentFile -gt 3]
then
break
else
rm $f
currentFile++
fi
done
done
我知道,在继续下一次备份之前,我的脚本可能会尝试删除旧版本的备份4次。我没有寻求性能或效率(我们没有那么多备份)。
我的代码是4小时搜索网络的结果,我用完了很好的Google查询(而且我的老板开始怀疑为什么我还没有回到我的日常任务)< / p>
关于如何解决我的问题,有人可以给我一些意见吗?
nOfOccurences
"$1.$2-*"
答案 0 :(得分:2)
尝试这个,看看它是否符合你的要求。
for project in `ls -1 | awk -F'-' '{ print $1}' | uniq`; do
files=`ls -1 ${project}* | sort`
n_occur=`echo "$files" | wc -l`
for f in $files; do
if ((n_occur < 3)); then
break
fi
echo "rm" $f;
((--n_occur))
done
done
如果输出似乎没问题,只需更换回声线。 啊,如果有什么事情发生的话,不要打败我。使用风险仅由您自己承担。