私の家には2つのディレクトリがあります:~/dir1
と~/dir2
、最初のファイルは~/dir1/file.txt
~/dir2
からシンボリックリンクを作成する方法はありますか~/
に移動しますが、そうでない場合はなぜですか?
~/
を実行してみました:
$ ln -s ./dir1/file.txt ./dir2/file.txt
しかし、私が予想するように、それは結果のシンボリックリンクが効果的に~/dir1/dir2/file.txt
を指すようにします。これは理にかなっていますが、私が実際に望んでいるものではありません。
私も試しました:
$ ln -s ./dir1/file.txt ../dir2/file.txt
どちらが返されますか:
ln: failed to create symbolic link `../dir2/file.txt': No such file or directory
これにより、~/dir2/file.txt
を指すシンボリックリンク~/../dir1/file.txt
が作成されると思います。
ですから、私の本当の質問はこれだと思います。ln
に、存在しないと思われるファイルへのシンボリックリンクを強制することはできますか?
編集:私が達成しようとしていることをさらに明確にするために、ホームディレクトリから実行できる単一のコマンドが必要です。
pushd dir2/ && ln -s ../dir1/file.txt && popd
またはPython(これは私が欲しいものに最も近いものです):
echo "import os; os.symlink('../dir1/file.txt', './dir2/file.txt')" | python
あなたはどちらかを行うことができます
絶対パスを使用する
$ ln -s ~/dir1/file.txt ~/dir2
$ readlink dir2/file.txt
/home/terdon/dir1/file.txt
正しい相対パスを使用する
$ ln -s ../dir1/file.txt dir2/
$ readlink dir2/file.txt
../dir1/file.txt
ユースケースによっては、一方が他方よりも優れている場合があります。相対パスを使用してリンクを作成する場合、パスターゲットに対して相対的である必要がありますであり、現在の場所に対してではないことを覚えておいてください。