すべてのシンボリックリンクを新しいパスに変更する方法

すべてのシンボリックリンクを新しいパスに変更する方法

してください、シンボリックリンクを新しいパスに変更したいと思います。
私のシンボリックリンク形式は次のとおりです。

lrwxrwxrwx. 1 s01 s01 56 Mar 22 13:17 zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m
lrwxrwxrwx. 1 s01 s01 56 Mar 23 17:03 znviy3civtq3.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/znviy3civtq3
lrwxrwxrwx. 1 s01 s01 56 Mar 24 20:07 zoi46hh4pu32.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/zoi46hh4pu32
lrwxrwxrwx. 1 s01 s01 56 Mar 23 18:22 zqt0h1gy9e4c.png -> /home/s01/public_html/cgi-bin/uploads/00029/zqt0h1gy9e4c

/homeすべてのファイルをから新しいセクションに移動しました。/home2

だから、すべてのシンボリックリンクを新しいパスに変更したいと思います。例:前:

zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

ありますように

zmjppcxlpq2m.png -> /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

すべてのファイルについて。どうですか?

答え1

ln古い宛先を削除せずにソフトリンクの宛先を強制的に変更できます。

ln -f -s /new/location/to/link newlink

たとえば、

ln -f -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m zmjppcxlpq2m.png

あるいは、原子置換のためにmvを使用することができる。

ln -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m new_zmjppcxlpq2m.png
mv new_zmjppcxlpq2m.png zmjppcxlpq2m.png

ディレクトリ内のすべてのリンクを変更するには、次のコマンドを試してください。

find /dir/with/symlinks/ -lname "/home/s01/public_html/cgi-bin/uploads/00029/*" \
    -exec  sh -c 'ln -sf `echo $(readlink $0) | sed s/home/home2/` $0' {} \;

コマンドを実行する前に、すべてのシンボリックリンクを慎重にバックアップしてください。

関連情報