次のコマンドを使用します:
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/
コメント
- ターゲットフォルダにリンクされているすべてのシンボリックリンクを削除するという意味ですか?または、見つかったすべてのシンボリックリンクを特定のフォルダに移動しますか?
- @uther:リンクを削除することを意味します。
回答
必ず代替回答 。現時点ではそれほど高く投票されていませんが、それはさらに重要です。
これを使用して、すべてのシンボリックリンクを削除できます:
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
コメント
- このコマンドはすべてのシンボリックリンクを削除しますか?上記の私の編集を参照してください。
- @マルコ:はい、最初の3行はそうです。もっと編集します:)
- iの最後に
-printも追加しますv id = “0fdc8cc887″>
コマンドで視覚的なフィードバックを取得します。
回答
With -lnameをサポートする最新のfind:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
コメント
- これは優れたシンプルなソリューションです。私はテストしました、そしてそれは魅力のように働きます。ありがとう
- おそらくそれは
find /usr/local/bin - 必ずしも現代的ではないはずです。 GNU
findは私が維持しているよりも長い間-lnameを持っていました(2003年頃から)。 - @JamesYoungman:ありがとう!現代の
findとは、実際にはGNUfindを意味します。 ;)usr/local/binを使用しました。これは、'がOPが使用したものだからです。
回答
findソリューションは素晴らしいです。
見つけられなかった場合に備えて-lnameをサポートします。これは、シェルとreadlinkのみを使用する別の方法です。
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
回答
zshの場合:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:Pはシンボリックリンクのないパスへのパスを完全に解決するため、/usr/local/texlive自体がシンボリックリンクのないパスであると想定します、シンボリックリンクの解決後に/usr/local/textliveの下にあるすべてのファイルが削除されます。これには、/usr/local/texlive/fooへのリンクだけでなくまたは/usr/./local/texlive/whateverまたは/some/other/symlinkへ。これ自体は/usr/local/texliveなど
回答
パスに移動し、パス構成を設定します
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
コメント
- これらは、
grepが検索しているusr/local/binのようなパスであるため、grep -Eは行く方法です。そうしないと、一致する結果がありません。また、lsのhは'ここでは何の目的も果たしません。-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)。詳細については、man lsまたはman grep
回答
sudo unlink /path/of/your/package
それだけです
コメント
- これにより、指定されたパスの下のターゲットを指すすべてのシンボリックリンクがどのように削除されますか?質問は、他のディレクトリ内のターゲットを指す特定のディレクトリ内のシンボリックリンクを削除することについて尋ねていることに注意してください。