Wildcards

如何刪除具有特殊目標的所有符號連結?

  • May 8, 2020

使用命令:

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/

請務必閱讀替代答案。更重要的是,儘管目前投票率不高。

您可以使用它來刪除所有符號連結:

find -type l -delete

與現代find版本。

在較舊的 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

引用自:https://unix.stackexchange.com/questions/39333