4 votes

Comment résoudre tous les liens symboliques dans un répertoire ?

J'essaie de créer un paquetage debian à partir d'un code source upstream qui n'est pas le mien. Les configure Le script fourni par l'auteur crée de nombreux liens symboliques dans le répertoire source. Il s'agit de liens symboliques vers tous les en-têtes de src dans le sous-dossier include (pour que le fichier makefile puisse facilement copier le fichier include dans le cas de l'installation d'un paquet de développement). J'utilise debhelper scripts pour créer le paquet.

J'utilise debhelper scripts pour créer le paquet. Le problème est l'utilisation du nouveau format de paquetage debian ( quilt 3.0 native ), debuild refuse d'ajouter les modifications du répertoire source consistant en des liens symboliques vers le répertoire final. diff dossier. J'obtiens des erreurs de ce type :

dpkg-source: error: cannot represent change to foo.h:
dpkg-source: error:   new version is symlink to /ba/foo/foo.h
dpkg-source: error:   old version is nonexistent

Je connais la bonne solution : Modifier la configuration de script pour ne pas créer de lien symbolique avec les en-têtes. Il devrait ajouter une cible à makefile pour installer devel l'emballage. Cependant, configure script a des problèmes de copyright. Je ne peux pas toucher aux sources en amont.

Je cherche un script bash script pour remplacer tous les liens symboliques dans un répertoire par les fichiers réels vers lesquels ils pointent. Par exemple si dans le répertoire d il y a trois fichiers a y b y c qu'ils alimentent en liens symboliques ../../foo/bar/x , ../../foo/bar/z ../../foo/bar/y , en exécutant le script souhaité (disons magic.sh ) donnant à l ./d comme premier argument, devrait

cp ../../foo/bar/x ./d/a
cp ../../foo/bar/y ./d/b
cp ../../foo/bar/z ./d/c

Je ne trouve pas de moyen de savoir vers quel fichier pointe un lien symbolique.

4voto

RN. Points 559

Utilice readlink .

$ readlink /etc/alternatives/editor
/usr/bin/vim.basic

et l'envelopper dans un Shell Shell parcourant les liens symboliques dans le répertoire.

Vous pouvez trouver des liens symboliques en utilisant find :

$ find . -type l

Un exemple plus complet :

#!/bin/bash

find . -maxdepth 1 -type l | while read LINE; do 
echo link: $LINE resolved: `readlink $LINE`
done

sorties

link: ./.remmina resolved: sparkleshare-homedir/remmina
link: ./project resolved: Documents/2011-2 Project/
link: ./.ssh resolved: sparkleshare-homedir/ssh

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