2009-01-07 19 views

cevap

8

Perl size bir sembolik bağın hedefini öğrenmek için readlink() işlevini kullanabilirsiniz.

Ayrıca, sembolik bağlantıların izinlerini okumak için lstat() işlevini de kullanabilirsiniz (sembolik olarak işaretlenen dosyanın ayrıntılarını okuyacak olan stat()'un aksine).

Perl'in lchown() sistem çağrısını açığa çıkarmaması nedeniyle, yeni sembolik bağlantıda sahipliğin asıl olarak ek bir yardımı olmadan yapılması mümkün değildir. Bunun için CPAN'dan Perl Lchown modülünü kullanabilirsiniz.

varsayarsak yeterli izinleri (nb: kontrolsüz code) sembolik bağ üzerinde izinleri hakkında endişelenmenize gerek yok

use Lchown; 
my $old_link = 'path to the symlink'; 
my $new_link = 'path to the copy'; 

my $dst = readlink($old_link); 
my @stat = lstat($old_link); 

symlink $dst, $new_link; 
lchown $stat[4], $stat[5], $new_link; # set UID and GID from the lstat() results 

- -rwxrwxrwx

+0

Teşekkürler. Simitlerin gerçek izinleri olmadığını fark etmedim. Sahibi değişikliği ne kadar kötü ihtiyacım olduğunu düşünmem gerek. – splintor

+0

ayrıca, link bağlantısının içeriğinin bir _relative_ yolu olması durumunda, eğer $ old_link ve $ new_link aynı dizinde bulunmuyorsa yeniden yazmanın gerekli olabileceğini de unutmayın! – Alnitak

3

modül File::Copy::Recursive o ilgilenir olarak her zaman görünür . Varsayılan olarak, sembolik linkleri kopyalayacak ve sahipliğini korumaya çalışacaktır.

+1

İşaretçi için teşekkürler. Dağıtımımda yok ve bu modülü eklemek istersem bunu düşünmeliyim. Ayrıca kaynakta dosyanın sahibinin ele alınmadığını görüyorum. Benim için ne kadar önemli olduğunu tekrar düşünmem gerek. – splintor

+0

Splintor ile aynı fikirdeyim - bu çalışırken, modül varsayılan yüklemede değil, dolayısıyla kullanıcılarınızın bağımlılıkları yüklemekten kaçınmak istiyorsanız iyi bir çözüm olmayacaktır. – JosephH

İlgili konular