我有这个文件夹结构:
build.1
build.2
build.3
build.4
current -> symlink to build.4
previous -> symlink to build.3
我正在运行 debian,删除每个没有符号链接的构建(=文件夹)的正确方法是什么?
答案1
正如 Bron 所说,没有官方的方法可以做到这一点(更确切地说:由于文件系统设计,不可能有这样的方法,你只能自己动手)。以下是我在 bash 中编写脚本的方法(假设当前结构过于宽松,fgrep
一般无法使用):
# Current list of symlinks (will return build.3 and build.4 in this case)
symed=`ls -1 | xargs -l readlink`;
# Loop over all build directories
for dir in build.*;
do
# Either it's a known symlink, or we remove it
fgrep -q $dir <<< $symed || rm -rf $dir;
done
答案2
这不是一种“正确”的方法,但您多久做一次呢?我通常的方法是运行一小段 Perl(选择您自己的毒药),它读取目录内容,检查符号链接,并构建要删除的目录列表。
符号链接的目标上没有元数据可以告诉您它被链接到哪里。
您还需要注意竞争条件 - 如果单独的任务正在更新符号链接,您不想在链接之前删除新目录!