ファイルの名前を変更すると機能しますが、ソフトリンクは古い名前を指します。この問題をどのように解決できますか?

ファイルの名前を変更すると機能しますが、ソフトリンクは古い名前を指します。この問題をどのように解決できますか?

たとえば、次のようにツリー内の多くのファイルの名前を変更します。

[bash]$ for file in `find . -name "*gsf*"`; do `mv $file ${file/gsf/msf}`; done

ファイル名一致では、「gsf」のすべてのインスタンス名が変更されます。GSF「msf」に変更されたがソフトリンクは、「gsf」を含む現在存在しないファイルを指し続けます。

たとえば、名前を変更した後、次のようになります。

lrwxrwxrwx 1 trusktr users     20 Apr 25 14:39 libmsf-1.so -> libgsf-1.so.114.0.23
lrwxrwxrwx 1 trusktr users     20 Apr 25 14:39 libmsf-1.so.114 -> libgsf-1.so.114.0.23
-rwxr-xr-x 1 trusktr users 265584 Apr 21 04:41 libmsf-1.so.114.0.23

ご覧のように、指すソフトリンクはlibgsf-1.so.114.0.23名前がに変わったため、もはや存在しませんlibmsf-1.so.114.0.23

ソフトリンクポインタの名前を変更するにはどうすればよいですか?

ベストアンサー1

技術的な説明とは別に回答になりました。シンボリックリンクが指す位置を変更できます。

  1. それらを探すfind . -type l
  2. 目標を変えるln -sfT target link_name

-sfTオプションは次のように指定する必要があります。リダイレクトシンボリックリンクは驚くべきことではありません。

おすすめ記事