コマンドで:
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 -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
-lname
をサポートする最新のfind
の場合:
find /usr/local/bin -lname '/usr/local/texlive/*' -delete
それを行う必要があります。
find
ソリューションは素晴らしいです。
検索結果が-lname
をサポートしていない場合に備えて、シェルとreadlink
のみを使用する別の方法を次に示します。
cd /usr/local/bin
for f in *; do
case "$(readlink "$f")" in /usr/local/texlive/*)
rm "$f"
;;
esac
done
あなたのパスに行き、あなた自身のパス構成を設定してください
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf