仅针对子目录中的现有目录批量删除 (rm -rf)
Batch removal (rm -rf) just for existing directories in a subdirectory
背景: 我写了一个非常简单的备份删除脚本,它应该删除早于三个版本更新的备份。
这通过始终将我的软件 (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 文件夹,其中甚至包括最新版本。如何解决这个问题?
如果您确定 GHOSTDIR
.
中只有带有版本名称的目录,则可以采用简单的解决方法
首先,您列出所有目录,使最新版本位于顶部,然后从第 4 行开始尾部输出。这意味着 3 个最新版本保持隐藏。最后删除它们。
ls
您可以修改为按时间排序 -t
,如果它更相关或保持字母排序。
cd $GHOSTDIR
ls -1rd */ | tail +4 | xargs rm -rf
或(在某些版本上)
cd $GHOSTDIR
ls -1rd */ | tail -n +4 | xargs rm -rf
就是这样。最多保留 3 个目录。
背景: 我写了一个非常简单的备份删除脚本,它应该删除早于三个版本更新的备份。 这通过始终将我的软件 (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 文件夹,其中甚至包括最新版本。如何解决这个问题?
如果您确定 GHOSTDIR
.
首先,您列出所有目录,使最新版本位于顶部,然后从第 4 行开始尾部输出。这意味着 3 个最新版本保持隐藏。最后删除它们。
ls
您可以修改为按时间排序 -t
,如果它更相关或保持字母排序。
cd $GHOSTDIR
ls -1rd */ | tail +4 | xargs rm -rf
或(在某些版本上)
cd $GHOSTDIR
ls -1rd */ | tail -n +4 | xargs rm -rf
就是这样。最多保留 3 个目录。