リンクを有効に保ちながらシンボリックリンクをコピーするには?

リンクを有効に保ちながらシンボリックリンクをコピーするには?

ディレクトリの下に、同じディレクトリにある一般ファイルを指す/usr/local/boost_1_52_0/stage/libシンボリックリンクがあるとします。libboost_timer.solibboost_timer.so.1.52.0

同じファイルを指してcpディレクトリをシンボリックリンクする方法。/usr/local/lib/usr/local/boost_1_52_0/stage/lib/libboost_timer.so.1.52.0

いくつかのオプションを検索して試しました。まず、リンク名を使用して通常のファイルをターゲットディレクトリにコピーします。 2番目はリンク自体をコピーしますが、新しいディレクトリではそのリンクは無効です。 3番目は、新しいリンクが元のリンクを指すようにして、通常のファイルを取得するために2回逆参照します。また、リンクファイル名を使用したいので、通常のファイルへのリンクを直接作成することはできません。

どうすればいいですか?

ベストアンサー1

最良の方法は2回逆参照することですが、質問で言及したという事実は、ユースケースには役に立たないことを意味すると思います(なぜ?)。

標準シェルbashで2番目に良いオプションは、次のものを使用することですreadlink -f(ファイル名に改行文字が含まれている場合、このオプションは中断される可能性が高いが可能です)。

#!/bin/bash
src="$1"
dest="$2"


fileLinkedTo=$(readlink -f "$src")
if [[ -d "$dest" ]]; then
    ln -s "$fileLinkedTo" "${dest%/}/${src##*/}"
else
    ln -s "$fileLinkedTo" "$dest"
fi

次に実行します。

./script /usr/local/boost_1_52_0/stage/lib/libboost_timer.so /usr/local/lib

おすすめ記事