我正在尝试做一些类似的清理工作这个问题。在 UNIX 操作系统中,我想要删除给定目录中未进行符号链接的目录。
例如,我有一个部署脚本,它为应用程序创建一个目录结构,如下所示:
1.0-201103071711/
1.0-201103071718/
1.0-201103071729/
current -> /opt/myapps/fooapp/1.0-201103071729/
我想创建一个脚本来删除该目录中非“当前”目录的目录。谢谢!
答案1
此 Bash 代码片段将查找没有链接目录的目录。它还将查找断开的链接。
for f in *; do (($(find -L -maxdepth 1 -samefile "$f" 2>/dev/null | wc -l) == 1)) && echo "found: $f"; done
它不会在当前目录或子目录之外查找。
请务必进行彻底的测试。
答案2
正如所引用的问题所提到的,没有官方的方法可以做到这一点。作为 Dennis 选项的替代方案,我提出了以下可怕的黑客攻击。请务必进行彻底测试。我建议用替换部分,-exec
直到ls
您确定它可以工作为止。
touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;
它将只检查当前目录。它本质上会触碰“current”链接的目录,然后删除修改时间超过两分钟的所有内容。如果其他目录有一段时间没有被触碰过,您可以增加计时器-mmin
,这样您就不会意外删除您想要的目录。这显然只有在您不介意更改当前目录的时间戳时才可行。——
Christopher Karel