【发布时间】:2021-03-09 04:49:43
【问题描述】:
背景:我编写了一个非常简单的备份删除脚本,它应该删除早于三个版本更新的备份。 这通过始终将我的软件(Ghost CMS)的新安装版本添加到 txt 文件中来工作,并且所有版本都位于同一目录中($GHOSTDIR/versions/3.x.y)。
nol=$(grep -c . ghostupgradehistory.txt)
rl=$(echo "$(($nol-3))")
lc=$(head -$rl ghostupgradehistory.txt)
kv=$(tail -3 ghostupgradehistory.txt)
dir=$(ls $GHOSTDIR/versions -d $lc 2> /dev/null)
if [[ ${dir[@]} ]]; then echo "Delete old versions" && echo $dir && echo "Keep last three versions" && echo $kv
cd $GHOSTDIR/versions && rm -rf $dir
fi
ghostupgradehistory.txt 看起来像这样
3.37.1
3.38.0
3.38.1
3.38.2
我遇到的问题是删除已识别过时版本的最后一条命令。它不只是删除那些,而是删除了整个 $GHOSTDIR/versions 文件夹,其中甚至包括最新版本。如何解决这个问题?
【问题讨论】:
-
为什么不使用 find 和 -not -newer 来引用最新版本?
-
我总是想保留三个版本作为备份,不管它们有多旧。
-
好的,所以做同样的事情,但使用最新版本 -3 所以在你的例子中 find -not -newer .3.38.0 -name *.versions. -not -name *.3.38.0 -type d -delete ?
-
不知道这可能是一个解决方案,但我认为“-name *.versions”。部分不正确,因为没有 .versions。附加到文件夹: cd ghost/versions/ [versions]$ ls 3.37.1 3.38.0 3.38.1 3.38.2
-
无论如何都要考虑一下。
标签: bash shell batch-processing rm