我试图做一些类似于这个问题的清理。 在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了。 这显然是唯一可行的,如果你不介意改变当前目录的时间戳。
– 克里斯托弗·卡雷尔