如何删除一个文件夹中没有符号链接的目录

我有这个文件夹结构:

build.1 build.2 build.3 build.4 current -> symlink to build.4 previous -> symlink to build.3 

我正在运行debian,什么是正确的方法来删除每个构build(=文件夹)没有符号链接到它?

正如Bron说的那样,没有官方的做法(更强烈地说:由于文件系统devise,不可能有一个,你只能自己推出)。 这将是我如何在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 

不是一个“正确”的方式,但你多久做一次? 我通常的做法是运行一小段Perl(select你自己的毒药),读取目录内容,检查符号链接,并build立一个要删除的目录列表。

没有符号链接的目的地的元数据会告诉你它被链接到。

你也需要关心竞争条件 – 如果一个单独的任务正在更新符号链接,你不想在链接之前删除新的目录!