J'ai un dossier sur mon serveur vers lequel j'avais un certain nombre de liens symboliques pointant. J'ai depuis créé un nouveau dossier et je souhaite modifier tous ces liens symboliques pour pointer vers le nouveau dossier. J'avais envisagé de remplacer le dossier d'origine par un lien symbolique vers le nouveau dossier, mais il semble que si je continuais avec cette pratique, cela pourrait devenir très compliqué très rapidement.
Ce que j'ai fait, c'est de modifier manuellement les liens symboliques pour pointer vers le nouveau dossier, mais j'en ai peut-être manqué quelques-uns.
Existe-t-il un moyen de vérifier s'il existe des liens symboliques pointant vers un dossier particulier?
J'utiliserais la commande find.
find . -lname /particular/folder
Cela recherchera récursivement dans le répertoire courant des liens symboliques vers /particular/folder
. Notez qu'il ne trouvera que des liens symboliques absolus. Une commande similaire peut être utilisée pour rechercher tous les liens symboliques pointant vers des objets appelés "dossier":
find . -lname '*folder'
De là, vous devrez éliminer tous les faux positifs.
Vous pouvez auditer les liens symboliques avec le programme symlinks
écrit par Mark Lord - il analysera un système de fichiers complet, normalisera les chemins des liens symboliques sous forme absolue et les imprimera sur stdout.
Il n'y a pas vraiment de moyen direct de vérifier ces liens symboliques. Considérez que vous pourriez avoir un système de fichiers qui n'est pas monté tout le temps (par exemple, un lecteur USB externe), qui pourrait contenir des liens symboliques vers un autre volume du système.
Vous pourriez faire quelque chose avec:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
Je note que find
de FreeBSD ne prend pas en charge le -lname
option, c'est pourquoi je me suis retrouvé avec ce qui précède.
find . -type l -printf '%p -> %l\n'
À part regarder tous les autres dossiers s'il y a des liens pointant vers le dossier d'origine, je ne pense pas que ce soit possible. Si c'est le cas, je serais intéressé.
find / -lname 'fullyqualifiedpathoffile'
Pour les liens physiques, vous pouvez obtenir l'inode de votre répertoire avec l'une des options "ls" (-i
, Je pense).
Puis un find
avec -inum
localisera tous les liens physiques courants.
Pour les liens logiciels, vous devrez peut-être faire un ls -l
sur tous les fichiers recherchant le texte après "->" et le normalisant pour s'assurer qu'il s'agit d'un chemin absolu.
find /foldername -type l -exec ls -lad {} \;