Geçerli dizine göre sembolik bir bağlantı oluşturun


110

Giriş dizinde harici HDD'mde bir dizine işaret eden sembolik bir bağlantı oluşturmaya çalışıyorum.

Bu şekilde belirttiğimde iyi çalışıyor:

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

Ancak bunu denediğimde hatalı bir bağlantı oluşturuyor:

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

Bu, cdiçine giremediğim bir bağlantı oluşturur .

Denedim, bash şikayetçi:

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

Evimdeki Veri sembolik bağlantısı, lsrenkli çıktıyı gösterecek şekilde ayarlandığında kırmızı renktedir.

Bu neden oluyor? Bu şekilde nasıl link oluşturabilirim? (Başka bir dizindeki çalışma dizinimdeki bir dizine bağlantı oluşturmak istiyorum.)


Düzenleme: göre bu (~ / Veri olurdu benim durumumda) İkinci argüman zaten var ve bir dizin ise StackOverflow cevap, lnhedefe bir sembolik yaratacak bu dizinin.

Ancak, aynı sorunu yaşıyorum:

ln -s Data/ ~/

7
Sadece rastgele bir ipucu: cd ~genellikle aynıdır cd.

3
ls -l ~/Data"kırmızı" bağlantıda neyin yanlış olduğunu görmenize yardımcı olurdu.
msw

Bunu yapabileceğimi bilmiyordum, teşekkürler. Bunu denediğimi hatırlıyorum cat, ama sonucun ne olduğunu unuttum ... (şu an evde değilim.)
jcora

Yan not, sadece, diyelim ki, içindeki tüm öğeler belirli bir klasör içinde tüm dosyalar, dir ve subdir bir sembolik oluşturmak istediğinizi varsayalım /run/media/name/exhdd/Data/için Dataaşağıdaki kullanınln -s /run/media/name/exhdd/Data/* Data
user2555595

Yanıtlar:


115

İşte neler oluyor. Göreceli bir yolla bir sembolik bağlantı yaparsanız, sembolik bağlantı olacaktır. Symlinks sadece onlara verdiğiniz yolları saklar. Asla tam yollara giden yolları çözmezler. Koşu

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

adında bir sembolik oluşturur ls2içinde /usr/binhiç ls(viz. /usr/bin/ls) sembolik link olduğu dizine (göreli /usr/bin). Yukarıdaki komut, herhangi bir dizinden işlevsel bir link oluşturur.

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

Sembolik bağlantıyı farklı bir dizine taşırsanız, dosyaya işaret etmekten vazgeçer /usr/bin/ls.

Bunu işaret eden Datave isimlendiren bir sembolik bağlantı oluşturuyorsunuz Data. Kendisine işaret ediyor. Dizinin mutlak yolu ile bir bağlantı yapmalısınız.

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

14

Ben de aynı problemi yaşıyordum. Google bu cevaba yol açtı, ancak en basit çözüm burada belgelenmedi:

ln -sT 

-Trick yapar

adam ln:

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

Sadece bunu buraya ekleyerek aynı soruyu bilen herkes bunu bulabilir :)


9

lnGöreceli yollarla davranışı sezgisel değildir. Akıl sağlığını iyileştirmek için -rbayrağı kullanın .

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

Açıklama:

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

Bunun anlamı lnbeklediğiniz şeyi yapacak olmasıdır. Bu hedef içinde ne dizin hangi dizin içinde bulunduğunuz göz önüne alan ve bağlantı olacak dizine göreceli bir yol inşa edecektir. (Olmadan varsayılan davranış -r) ilk parametreyi (hedef) yorumlamak etmektir anlamıyla içinde, bu durumda yolu kendiniz kurmanız gerekir, böylece bağlantının dizininde geçerli olur.

Alternatif olarak, @SmithJohn tarafından belirtildiği gibi mutlak bir yol kullanın.

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

veya

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

-1

Çok basit bir klasör için link oluşturabilirsiniz. Bak komutum

-n / home / targatedfolder / var / www / html / link_adı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.