Sembolik bağlantı oluştur - varsa bir üzerine yaz


54

Bir dosyayı her oluşturduğunuzda verileri alıp /path/to/data/folder/month/date/hour/minute/fileişaretlemek /path/to/recent/fileve bunu otomatik olarak yapmak istiyorum.

Varsa önceden bilmeyeceğimi farz edersem, /path/to/recent/fileonu (eğer varsa) veya değiştirmeyi (eğer varsa) nasıl değiştirebilirim? Var olup olmadığını kontrol edip silme işlemi yapabileceğime eminim, sembolik bağlantı, ancak bir adımda istediğimi yapacak basit bir komut olup olmadığını merak ediyorum.


Hedef varsa, fakat bir sembolik bağlantı değilse, ne olmasını istersiniz?
Toby Speight

Yanıtlar:


34

Lütfen kılavuzu okuyunuz .

ln -sfn /new/target /path/to/symlink

$ man ln

-n, --no-dereference
LINK_NAME adlı dizini, bir dizine sembolik bir bağlantıysa normal bir dosya olarak kabul eder.


1
Neden bu doğru cevap?
Şef

1
@ Mrrief Eğer /path/to/symlinkzaten bir dizine bir -nişaret ise, /path/to/symlink/target/path/to/symlink
bayraksız

MacOS'ta, bunun hala bazı durumlarda, örneğin /path/to/symlinkvarolan ve bir dizin olduğu durumlar için çalışmadığını , ancak bir sembolik bağlantı olmadığını unutmayın. Bence etrafta çalışmanın tek yolu rm -rfönce koşmak .
Flimm

78

Bu amacı ln'ın -fseçeneği: Bu bağlantıyı oluşturmadan önce varolan hedef dosyaları varsa kaldırır.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

Gerekirse, varolan bir dosyayı veya /path/to/recent/fileişaret /path/to/data/folder/month/date/hour/minute/filebağlantısını gerekirse bir dosyaya işaret eden (ve orada zaten bir şey yoksa, iyi çalışan) işaret bağlantısını oluşturacaktır .

Bir dizin veya bir dizine işaret bağlantısı, hedef adıyla zaten mevcutsa, işaret bağlantısı içinde oluşturulur (bu nedenle /path/to/recent/file/fileyukarıdaki örnekte yer alırsınız ). -nBazı sürümlerinde kullanılabilir seçenek, ln, gerektiğinde değiştirilmesini, sizin için dizin sembolik ilgilenir:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln belirtmiyor, -nbu yüzden genellikle ona güvenemezsiniz. Çok ln'ın davranışı uygulama tanımlı gerçekten kullandığınız sistemin özelliklerini kontrol etmeniz gerekir böyledir. Eğer kullanıyorsanız GNUln , kullanabileceğiniz -tve -T(dizinleri huzurunda davranışı tam öngörülebilir hale getirmek için, çok seçenek yani yerine aynı adla varolan dizin içinde bağlantı oluşturma başarısız).

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.