サーバー上に、いくつかのシンボリックリンクを指すフォルダーがあります。それ以来、新しいフォルダーを作成しましたが、これらすべてのシンボリックリンクを新しいフォルダーを指すように変更したいと思います。元のフォルダーを新しいフォルダーへのシンボリックリンクに置き換えることを検討していましたが、その練習を続けた場合、非常に速く非常に厄介になる可能性があります。
私がやっていることは、新しいフォルダを指すように手動でシンボリックリンクを変更することですが、いくつか見逃しているかもしれません。
特定のフォルダーを指すシンボリックリンクがあるかどうかを確認する方法はありますか?
私は、findコマンドを使用すると思います。
find . -lname /particular/folder
これは、/particular/folder
へのシンボリックリンクを現在のディレクトリで再帰的に検索します。それが唯一絶対シンボリックリンクを見つけることに注意してください。同様のコマンドを使用して、「フォルダー」と呼ばれるオブジェクトを指すすべてのシンボリックリンクを検索できます。
find . -lname '*folder'
そこから、任意の偽陽性を取り除く必要があるでしょう。
Mark Lordによって書かれた symlinks
プログラム を使用してシンボリックリンクを監査できます。ファイルシステム全体をスキャンし、シンボリックリンクパスを絶対形式に正規化し、標準出力に出力します。
このようなシンボリックリンクを確認する直接的な方法は実際にはありません。常にマウントされていないファイルシステム(外部USBドライブなど)があり、システム上の別のボリュームへのシンボリックリンクが含まれている可能性があることを考慮してください。
あなたは何かをすることができます:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
FreeBSDのfind
は-lname
オプションをサポートしていないことに注意してください。これが、私が上記で終わった理由です。
find . -type l -printf '%p -> %l\n'
元のフォルダを指すリンクがある場合、他のすべてのフォルダを見る以外に、私はそれが可能であるとは思わない。もしそうなら、私は興味があります。
find / -lname 'fullyqualifiedpathoffile'
ハードリンクの場合、「ls」オプションの1つ(-i
、と思います)を使用して、ディレクトリのiノードを取得できます。
次に、-inum
を含むfind
は、すべての一般的なハードリンクを見つけます。
ソフトリンクの場合、「->」の後のテキストを探し、それを正規化して絶対パスであることを確認するために、すべてのファイルでls -l
を実行する必要があります。
find /foldername -type l -exec ls -lad {} \;