67

サーバー上に、多数のシンボリック リンクを指すフォルダーがあります。それ以来、新しいフォルダーを作成したので、これらすべてのシンボリック リンクを新しいフォルダーを指すように変更したいと考えています。元のフォルダーを新しいフォルダーへのシンボリックリンクに置き換えることを検討しましたが、その慣行を続けると、すぐに非常に面倒になる可能性があるようです.

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

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

4

9 に答える 9

85

find コマンドを使用します。

find . -lname /particular/folder

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

find . -lname '*folder'

そこから、誤検知を取り除く必要があります。

于 2008-09-19T07:15:09.810 に答える
7

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

于 2012-03-13T10:46:03.310 に答える
6

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

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

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

FreeBSD はこのオプションをfindサポートしていないことに注意してください。そのため、上記の結果になりました。-lname

于 2008-09-19T07:19:03.293 に答える
4
find . -type l -printf '%p -> %l\n'
于 2010-10-08T15:26:08.630 に答える
2

元のフォルダーを指すリンクがある場合、他のすべてのフォルダーを調べることは別として、それは不可能だと思います。もしそうなら、私は興味があります。

于 2008-09-19T07:19:39.550 に答える
1
find /foldername -type l -exec ls -lad {} \;
于 2014-01-03T12:50:31.850 に答える
1
find / -lname 'fullyqualifiedpathoffile'
于 2008-09-19T07:16:28.370 に答える
1

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

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

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

于 2008-09-19T07:17:41.083 に答える