現在のディレクトリに関連するシンボリックリンクを作成します。


110

外付けHDD上のディレクトリを指すシンボリックリンクをホームディレクトリに作成しようとしています。

次のように指定すると正常に機能します。

cd ~
ln -s /run/media/name/exhdd/Data/ Data

しかし、これを試してみると、リンクに障害が発生します:

cd /run/media/name/exhdd
ln -s Data/ ~/Data

これは、私がcd入ることができないリンクを作成します。

私が試してみると、bashは文句を言います:

bash: cd: Data: Too many levels of symbolic links

ls色付きの出力を表示するように設定されている場合、自宅のデータシンボリックリンクも赤色で表示されます。

なぜこうなった?その方法でリンクを作成するにはどうすればよいですか?(別のディレクトリの作業ディレクトリにあるディレクトリへのシンボリックリンクを作成したい。)


編集:この StackOverflowの回答によれば、2番目の引数(私の場合は〜/ Data)が既に存在し、ディレクトリである場合、そのディレクトリ内にlnターゲットへのシンボリックリンクが作成されます。

しかし、私は同じ問題を次のように経験しています:

ln -s Data/ ~/

7
ただランダムなヒント:cd ~通常はと同じcdです。

3
ls -l ~/Data「赤」リンクの何が問題なのかを確認するのに役立ちます。
msw

うーん、それができるとは知らなかった、ありがとう。私がしようとして覚えてcat(私は彼らに家瞬間はないよ。)...それが、私は結果だったか忘れてしまった
jcora

サイドノートでは、あなただけ、たとえば、内部のすべての項目の特定のフォルダ内のすべてのファイル、ディレクトリおよびサブディレクトリのシンボリックリンクを作成するとします/run/media/name/exhdd/Data/Data、その後には、以下の使用ln -s /run/media/name/exhdd/Data/* Data
user2555595

回答:


115

ここで何が起こっているのかです。相対パスでシンボリックリンクを作成すると、シンボリックリンクは相対になります。シンボリックリンクは、指定したパスを保存するだけです。パスを絶対パスに解決することはありません。ランニング

$ pwd
/usr/bin
$ ln -s ls /usr/bin/ls2

名前のシンボリックリンクを作成ls2/usr/binls(すなわち。/usr/bin/lsシンボリックリンクは(しているディレクトリへの)相対/usr/bin)。上記のコマンドは、任意のディレクトリから機能的なシンボリックリンクを作成します。

$ pwd
/home/me
$ ln -s ls /usr/bin/ls2

シンボリックリンクを別のディレクトリに移動した場合、のファイルを指すのをやめるでしょう/usr/bin/ls

を指すシンボリックリンクを作成しData、名前を付けていDataます。それは自分自身を指している。ディレクトリの絶対パスでシンボリックリンクを作成する必要があります。

ln -s "$(realpath Data)" ~/Data

14

私は同じ問題を抱えていました。Googleはこの答えを導きましたが、最も簡単な解決策はここには記載されていません。

ln -sT 

-Tはトリックを行います

男ln:

-T, --no-target-directory
    treat LINK_NAME as a normal file always

これをここに追加するだけで、同じ質問を持つ人なら誰でも見つけることができます:)


9

lnの相対パスでの動作は直感的ではありません。正気を回復するには、-rフラグを使用します。

cd /run/media/name/exhdd
ln -sr Data/ ~/Data

説明:

   -r, --relative
          create symbolic links relative to link location

それが意味することは、lnあなたが期待することをするということです。現在のディレクトリ、ターゲットのディレクトリを考慮し、リンクが存在するディレクトリへの相対パスを構築します。デフォルトの動作(なし-r)は、文字通り、最初のパラメータ(ターゲット)を解釈することです。その場合、リンクのディレクトリで有効になるように自分でパスを作成する必要があります。

または、@ SmithJohnで述べたように、絶対パスを使用します

ln -s "$(realpath Data)" ~/Data #bash shell

または

ln -s "(realpath Data)" ~/Data #fish shell

-1

非常に簡単に、フォルダーのリンクを作成できます。私の命令を見て

ln -s / home / targatedfolder / var / www / html / link_name

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.