【发布时间】:2013-02-11 15:08:46
【问题描述】:
我的任务是从我们的 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 小时的结果,但我的谷歌查询已经用完了(我的老板开始想知道为什么我还没有回到我的日常任务中)
谁能给我意见,我可以如何解决我的问题?
- 找到
nOfOccurences - 让 awk 找到符合
"$1.$2-*"模式的文件
【问题讨论】:
-
(我假设操作系统会为我对这些文件进行排序,所以最新的备份也将是最后的备份) ...好吧,现在,就这样假设不是一件好事。目录条目以任意顺序返回,您必须自己对它们进行排序。为什么不用自己熟悉的编程语言?
-
@derobert 那将是 C#,我必须在数据库服务器上安装 Mono,我的雇主肯定会反对。
-
发布一些示例输入和预期输出,因为您的描述不明确,我们无法从代码中判断您想要做什么,因为如果代码执行您想要的操作,您就不会问这个问题.