Existe-t-il un moyen de vérifier s’il existe des liens symboliques pointant vers un répertoire?

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

Question

J'ai un dossier sur mon serveur vers lequel j'ai eu plusieurs liens symboliques pointant. Depuis, j'ai créé un nouveau dossier et je souhaite modifier tous ces liens symboliques pour qu'ils pointent 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 est de changer manuellement les liens symboliques pour qu'ils pointent vers le nouveau dossier, mais j'en ai peut-être oublié quelques-uns.

Existe-t-il un moyen de vérifier s’il existe des liens symboliques pointant vers un dossier particulier?

Était-ce utile?

La solution

J'utiliserais la commande de recherche.

find . -lname /particular/folder

Cela va rechercher récursivement dans le répertoire en cours 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 sur des objets appelés "dossier":

.
find . -lname '*folder'

À partir de là, vous devrez éliminer les faux positifs.

Autres conseils

Vous pouvez vérifier les liens symboliques avec le programme des liens symboliques . écrit par Mark Lord - il analysera tout un système de fichiers, normalisera les chemins des liens symboliques sous forme absolue et les imprimera sur la sortie standard.

Il n’existe aucun moyen direct de rechercher de tels liens symboliques. Considérez que votre système de fichiers peut ne pas être monté tout le temps (par exemple, un lecteur USB externe), pouvant contenir des liens symboliques vers un autre volume du système.

Vous pouvez faire quelque chose avec:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Je constate que find de FreeBSD ne supporte pas l'option -lname , c'est pourquoi j'ai obtenu ce qui précède.

find . -type l -printf '%p -> %l\n'

À part regarder tous les autres dossiers s’il existe des liens pointant vers le dossier original, je ne pense pas que ce soit possible. Si c'est le cas, cela m'intéresserait.

find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;

Pour les liens en dur, vous pouvez obtenir l’inode de votre répertoire avec l’un des "& ls" ls " options ( -i , je pense).

Ensuite, un find avec -inum localisera tous les liens durs courants.

Pour les liens symboliques, vous devrez peut-être effectuer un ls -l sur tous les fichiers à la recherche du texte après "& -; > " et en le normalisant pour qu'il soit un chemin absolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top