使用命令:
ls -la *
我可以列出我所有的符号链接。
如何删除链接到特殊文件夹的所有符号链接?
例如:
在我的目录中usr/local/bin
有以下条目:
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded
lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex
lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
现在我想删除该路径的所有链接/usr/local/texlive/
答案1
请务必阅读替代答案。更重要的是,尽管目前投票率还没有那么高。
您可以使用它来删除所有符号链接:
find -type l -delete
与现代find
版本。
在较旧的查找版本上,它可能必须是:
find -type l -exec rm {} \;
# or
find -type l -exec unlink {} \;
要限制到某个链接目标,假设所有路径都不包含任何换行符:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
或格式精美
find -type l |
while IFS= read -r lnkname;
do
if [ "$(readlink '$lnkname')" = "/your/exact/path" ];
then
rm -- "$lnkname"
fi
done
当然,还可以if
包括更复杂的条件,例如将模式与 相匹配grep
。
根据您的情况量身定制:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q '^/usr/local/texlive/'); then rm "$lnk"; fi; done
或者格式很好:
find -type l | while IFS= read -r lnk
do
if readlink "$lnk" | grep -q '^/usr/local/texlive/'
then
rm "$lnk"
fi
done
答案2
现代的find
支持-lname
:
find /usr/local/bin -lname '/usr/local/texlive/*' -delete
应该这样做。
答案3
解决find
方案很棒。
以防万一您的发现不支持-lname
,这是另一种仅使用 shell 和 的方法readlink
。
cd /usr/local/bin
for f in *; do
case "$(readlink "$f")" in /usr/local/texlive/*)
rm "$f"
;;
esac
done
答案4
转到您的路径并设置自己的路径配置
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf