43 votes

Remplacer les liens symboliques par des fichiers

Y a-t-il un moyen facile de remplacer tous les liens symboliques par le fichier auquel ils se lient ?

1voto

user225929 Points 11

J'avais le même problème avec gwenview qui copiait des liens alors que vous vous attendiez normalement à ce qu'il suive le lien et copie le fichier.

Ce que j'ai fait pour "nettoyer" le répertoire en suivant tous les liens et en copiant tous les fichiers pointés vers le répertoire, a été de créer un répertoire temporaire, puis d'exécuter par exemple :

"for file in `ls`; do cp -L $file scratchdir/$file; done; mv scratchdir/* ./"

C'est trop dangereux pour mettre dans un script car il n'y a pas de vérification, mais cela a résolu mon problème.

0voto

Autotrader Points 1

J'ai fait une version en une seule ligne, car mon web-hôtel n'autorisait pas les scripts bash et cela a bien fonctionné pour moi :

avant :
> find . -type l | wc -l
358

> for link in `find . -type l` ; do echo "$link : "; ls -al $link ; cp $link notalink; unlink $link; mv notalink $link ; ls -al $link; done
...

après :
> find . -type l | wc -l
0

0voto

Diego Points 145

En s'appuyant sur les exemples ci-dessus, voici ma ligne de commande en style verbeux. La seule chose obscure à savoir est que "{}" fait référence à l'argument actuel de -exec et ; est la fin de ligne échappée pour le même.

find ./ -type l -exec sh -c 'cp --remove-destination $(readlink "{}") "{}"' \;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X