mv
ファイルへのシンボリックリンクを壊さずにファイルを作成できますか?これに対する私の最初の反応は「いいえ」です。移動後すぐにリンクを変更するためのスクリプトベースのソリューションを開発していますが、他の人はこの問題をどのように解決したかを知りたいと思います。シンボリックリンクのパスと名前は事前に知られているので、理論的にすべきことは次のとおりです。
- リンクの宛先を取得します
- MVの目標
- 新しい宛先へのリンクを再作成します。
- 新しいターゲットを指す新しいリンクを作成します(今は維持したい元のリンクとは異なります)。
後で:
- 古いリンクを削除
1-4はbashスクリプトでカプセル化されていますが、誰かがよりエレガントな方法を持っているのか、私が知らない組み込みやコマンドを知っているのか疑問に思います。
答え1
あなたは正しい道を行っています。あなたが説明する順序よりも簡単な方法はないと思います。
ステップ3と4は少し混乱しています。既存のリンクを再配置する場合は、ln -f
同じ名前で既存のファイルを上書きできます。新しい宛先名を反映してリンク名も変更するには、順序が正しいものです。
答え2
あなたの状況に合わせて:
# change target of a symbolic link
# -------------
# ln -s, --symbolic make symbolic links instead of hard links
# ln -f, --force remove existing destination files
#
# Setup: make junk.link to file junk
echo hello > ~/junk
ln -s ~/junk ~/junk.link; cat ~/junk.link
#
# move file and point the link to it.
org="$(readlink ~/junk.link)"
new="$org".moved
mv "$org" "$new"
ln -s -f "$new" "$new".link # '-s' for a soft link