En Perl, vous pouvez utiliser la fonction readlink()
pour savoir la destination d'un lien symbolique.
Vous pouvez également utiliser la fonction lstat()
pour lire les autorisations du lien symbolique (par opposition à stat()
qui lira les détails du fichier pointé par le lien symbolique).
En réalité, la définition de la propriété sur le nouveau lien symbolique ne peut pas être effectuée sans aide supplémentaire car Perl n'expose pas l'appel système lchown()
. Pour cela, vous pouvez utiliser le module Perl Lchown
du CPAN.
En supposant des autorisations suffisantes (nb: le code sans contrôle)
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
Vous n'avez pas besoin de vous soucier des autorisations sur le lien symbolique - ils apparaissent toujours comme -rwxrwxrwx
Merci. Je n'ai pas remarqué que symlinks n'a pas de véritables permissions. Je dois penser à quel point j'ai besoin que le propriétaire change. – splintor
notez également que si le contenu du lien symbolique est un chemin _relative_, alors il peut être nécessaire de réécrire si $ old_link et $ new_link ne sont pas dans le même répertoire! – Alnitak