Bir dizinin sembolik bağının üzerine nasıl yazılır?


15

İki dizin vardır foo1ve foo2.

İlk önce bir dizin symlink yapmak ln -s foo1 bar. Bundan sonra symlink'i değiştirmek istiyorum, bu yüzden yazdımln -sf foo2 bar

Ancak barhala bağlantılıdır foo1. Symlink foo2, içinde oluşturulur foo1.

Ben değiştirmek istediğinizde ne yazmalısınız foo1tarafından foo2?

Üç ortamda test ettim.

  1. Ubuntu 12.04, ln (GNU çekirdek dosyaları) 8.13
  2. CentOS 6.4, ln (GNU çekirdek çıktıları) 8.4
  3. OS X 10.7.5, ln (sürüm olmadan)

Yanıtlar:


18

Bunu yapmanın uygun yolu -n, --no-dereferenceseçeneği böyle kullanmaktır .

$ ln -snf foo2 bar

Bu ln, varolan symlink'i bir dosya olarak değerlendirir. Aksi takdirde, dereferences bariçin foo1, içine alçalır foo1ve orijinal kullanır TARGETolarak adını LINK_NAMEve o en neden sembolik bağ sona foo2içeride oluşturulan foo1dizinde. Manpage lnşu durumu belirtiyor ...

-n, --no-dereference
       bir dosyaya sembolik bir bağlantıysa, LINK_NAME dosyasını normal bir dosya olarak ele al
       rehber

Aşağıda, isteğe bağlı lnve seçeneksiz 8.21 sürümüne sahip Arch Linux masaüstümde kabuk çıktısı --no-dereferencevar, --no-dereferenceseçenek olmadan yaptığınız aynı sonuçları aldım , ancak --no-dereferencebeklendiği gibi çalıştı.

$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
  total 0
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2

Cevabınız için teşekkürler. Eğer çevreye bağlı bir problemse, çevremi yazacağım. Hangi işletim sistemini kullanıyorsunuz? hangi çıktılar ln --version?
ironsand

Bunu 8.17 sürümüne sahip bir Fedora 18 VM'de denedim. İlginç bir şekilde, bunu Arch Linux masaüstümde 8.21 sürümüyle denedim ve aynı sonuçları aldım. Görünüşe göre bu iki sürüm arasında bir şeyler değişti. Gönderdiğim çözüm her iki durumda da çalıştı.
Drew Chapin

Bilginize, bu cevabı justlinux.com forumlarında buldum .
Drew Chapin

Teşekkürler druciferre! lnKomutun bu kadar sık ​​yükseltildiğini hiç düşünmemiştim .
ironsand

Ben de osx'ta test ettim. sorunu lnüzerine yazmak ve ln -snfçözmek ile ubuntu ve centos ile aynı çalışır . Rağmen ln -hosx kullanmak için tercih seçeneği.
ironsand
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.