Je travaille sur un système HP-UX et je veux savoir s'il existe des liens symboliques circulaires.
Jusqu'à présent, j'utilise la commande:
ls -lrt `find ./ -follow -type l`
Mais cela ne fait que ls -lrt sur le répertoire courant.
Quelle commande dois-je utiliser pour trouver tous les liens symboliques circulaires dans un système?
unix
find
symbolic-link
hp-ux
Vladimir
la source
la source
find
commande est en train d'imprimer.
ou de ne rien imprimer (donc vous exécutez simplementls -lrt
ouls -lrt .
) Vous ne savez pas assez sur HP-UXfind
pour vous dire comment résoudre ce problème (peut-être que cela nécessite une explicite-print
? ). 2) Que voulez-vous dire par «circulaire»?./a -> ./b
et./b -> ./a
? Et alors/home/foo/a -> /home
? Ou/home/foo/a -> /home/bar
et/home/bar/b -> /home/foo
?-follow
ne me donne- t-elle pas réellement de vrais liens?-follow
,find
examine le lien lui-même, pas le fichier vers lequel il pointe.find . -type l
Imprime donc les choses qui sont des liens (parce qu'elles le sont-type l
) sans même chercher à voir vers quoi elles pointent (qui seraient des fichiers ou des répertoires ou d'autres liens pointant vers des fichiers ou des répertoires).Réponses:
La page de manuel de GNU find indique que toutes les trouvailles POSIX sont censées détecter les boucles du système de fichiers et émettre des messages d'erreur dans ces cas, et j'ai testé
sur GNU find, qui a pu trouver des boucles du formulaire
./a -> ./b
et./b -> ./a
imprimer l'erreur(cela a également fonctionné
a->b->c->a
)De même, les boucles du formulaire
./foo/x -> ..
et./foo/a -> ./bar
+ ont./bar/b -> ./foo
imprimé les erreursSi vous vouliez faire quelque chose avec la sortie autre que la lire, vous auriez besoin de la rediriger de stderr vers stdout et de la diriger vers un script qui peut analyser les messages d'erreur.
la source
-follow
, oui.ls
lien au lieu d'obtenir des liens réels lorsque vous ne l'utilisez pas-follow
?ls
commande en utilisant la sortie de votrefind
commande. Votrefind
commande n'a rien imprimé, donc votre shell s'est exécutéls
sans rien, qui répertorie le répertoire courant.