特別なターゲットを持つすべてのシンボリックリンクを削除するには?

特別なターゲットを持つすべてのシンボリックリンクを削除するには?

使用コマンド:

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素晴らしいです。

あなたの検索結果がそれをサポートしていない場合に備えてシェル-lnamereadlink

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

関連情報