Y a-t-il un moyen facile de remplacer tous les liens symboliques par le fichier auquel ils se lient ?
Réponses
Trop de publicités?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.
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
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 "{}") "{}"' \;
- Réponses précédentes
- Plus de réponses