特定のディレクトリ内のファイル/ディレクトリを指すすべてのシンボリックリンクを見つける方法


14

この質問へのまたはこのいずれかのあなたは(のは、それを呼びましょう与えられたディレクトリを指すシンボリックリンクを探す方法についての解決策を取得します(たとえば)/dir1私は、おそらく任意のファイル/フォルダの内側を指すシンボリックリンクに興味を持っていながら、) /dir1

このようなディレクトリを削除したいのですが、他のディレクトリ(呼び出してみましょう)のように、安全に実行できるかどうか/dir2はわかりません/dir1

さらに、絶対パスまたは相対パスを使用してこれらのシンボリックリンクを作成した可能性があります。私の唯一の助けは、チェックしたいシンボリックリンクがマウントされたファイルシステム上にあることを知っていることです/dir2

回答:


15

以下を使用して、すべてのシンボリックリンクを検索できます。

find / -type l 

これをルートとして実行して、ディスク上のすべての場所にアクセスすることができます。

readlink -fリンクのフルパスを取得するためにこれらを使用して展開することができgrep、削除を検討しているターゲットディレクトリに対する出力ができるはずです:

find / -type l -exec readlink -f {} + | grep -F /dir2

使用すると、ターゲットディレクトリを指しているfind / -type l -printf '%l\n'ような相対リンクを取得でき../tmp/xyzますが、完全に展開されていないため一致しません。


1
サブツリーの場合は、シンボリックリンクをたどると便利ですfind -L /subtree -xtype l -exec readlink -f {} +
。– ruvim

3

私の場合、受け入れられた回答は役に立ちませんでした(リンクソースを出力しなかったため)。ここに私のために働いたものがあります。

私は2つの-exec句を使用してそれを回避しました:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.