如何列出目录中没有被符号链接的目录?

我试图做一些类似于这个问题的清理。 在UNIX操作系统中,我想要删除给定目录中未被符号链接的目录。

例如我有一个部署脚本,为这样的应用程序创build一个目录结构:

1.0-201103071711/ 1.0-201103071718/ 1.0-201103071729/ current -> /opt/myapps/fooapp/1.0-201103071729/ 

我想创build一个脚本来删除那个不是“当前”目录的目录。 谢谢!

这个Bash片段将会find没有目录链接的目录。 它也会find断开的链接。

 for f in *; do (($(find -L -maxdepth 1 -samefile "$f" 2>/dev/null | wc -l) == 1)) && echo "found: $f"; done 

它不会看当前目录或子目录之外。

一定要彻底testing一下。

正如所提到的问题,没有一个正式的方法来做到这一点。 作为丹尼斯select的替代scheme,我提出以下可怕的黑客攻击。 请务必彻底testing。 我build议用lsreplace-exec部分,直到确定它可以正常工作。

touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;

它只会检查当前目录。 它基本上触及由“当前”链接的目录,然后删除修改时间早于两分钟的任何内容。 如果其他目录在一段时间内没有被触摸,你可以在-mmin上增加计时器,这样你就不会不小心把目录加-mmin了。 这显然是唯一可行的,如果你不介意改变当前目录的时间戳。

– 克里斯托弗·卡雷尔