web-dev-qa-db-ja.com

ディレクトリを指すシンボリックリンクがあるかどうかを確認する方法はありますか?

サーバー上に、いくつかのシンボリックリンクを指すフォルダーがあります。それ以来、新しいフォルダーを作成しましたが、これらすべてのシンボリックリンクを新しいフォルダーを指すように変更したいと思います。元のフォルダーを新しいフォルダーへのシンボリックリンクに置き換えることを検討していましたが、その練習を続けた場合、非常に速く非常に厄介になる可能性があります。

私がやっていることは、新しいフォルダを指すように手動でシンボリックリンクを変更することですが、いくつか見逃しているかもしれません。

特定のフォルダーを指すシンボリックリンクがあるかどうかを確認する方法はありますか?

60
nickf

私は、findコマンドを使用すると思います。

find . -lname /particular/folder

これは、/particular/folderへのシンボリックリンクを現在のディレクトリで再帰的に検索します。それが唯一絶対シンボリックリンクを見つけることに注意してください。同様のコマンドを使用して、「フォルダー」と呼ばれるオブジェクトを指すすべてのシンボリックリンクを検索できます。

find . -lname '*folder'

そこから、任意の偽陽性を取り除く必要があるでしょう。

77
skymt

Mark Lordによって書かれた symlinksプログラム を使用してシンボリックリンクを監査できます。ファイルシステム全体をスキャンし、シンボリックリンクパスを絶対形式に正規化し、標準出力に出力します。

7
JJK

このようなシンボリックリンクを確認する直接的な方法は実際にはありません。常にマウントされていないファイルシステム(外部USBドライブなど)があり、システム上の別のボリュームへのシンボリックリンクが含まれている可能性があることを考慮してください。

あなたは何かをすることができます:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

FreeBSDのfind-lnameオプションをサポートしていないことに注意してください。これが、私が上記で終わった理由です。

5
Greg Hewgill
find . -type l -printf '%p -> %l\n'
3
no1uknow

元のフォルダを指すリンクがある場合、他のすべてのフォルダを見る以外に、私はそれが可能であるとは思わない。もしそうなら、私は興味があります。

2
stephanea
find / -lname 'fullyqualifiedpathoffile'
1
bfabry

ハードリンクの場合、「ls」オプションの1つ(-i、と思います)を使用して、ディレクトリのiノードを取得できます。

次に、-inumを含むfindは、すべての一般的なハードリンクを見つけます。

ソフトリンクの場合、「->」の後のテキストを探し、それを正規化して絶対パスであることを確認するために、すべてのファイルでls -lを実行する必要があります。

1
paxdiablo
find /foldername -type l -exec ls -lad {} \;
1
Lunar Mushrooms