Si find $HOME/MySymlinkedPath -name "run*.sh"
j'exécute cette commande, rien ne se passe et ne donne aucune erreur ('MySymlinkedPath' est un chemin lié à un autre disque dur autre que mon $ HOME).
Celles-ci échouent également:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
Et juste pour être sûr, ce chemin inexistant échoue (bien sûr) find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"
donc le chemin est trouvé (parce que cette erreur ne se produit pas) mais find
n'effectue pas la recherche dessus, et je suis beaucoup ignorant maintenant.
Cela ne fonctionne que si je cd $HOME/MySymlinkedPath
commence par supprimer la référence de chemin comme celle-ci, find -name "run*.sh"
mais ce n'est pas bon pour mes scripts.
Une information supplémentaire :
cette commande fonctionne comme d'habitude ls $HOME/MySymlinkedPath/run*.sh
, et si j'y vais cd $HOME/MySymlinkedPath
et l'exécute, ls ..
le résultat n'est pas ce que j'attendais - la liste du chemin où se trouve le chemin du lien symbolique - il renvoie la liste du vrai chemin sur l'autre média / disque dur !!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Repenser :
est-ce un problème avec find
et ls
, ou avec mon système? ou c'est prévu et pas un problème du tout ?? Je suis sur Ubuntu 12.10. Il échoue sur tous les terminaux que j'ai testés et ne semble donc pas être un "problème" de terminal.
Réponses:
Voici la réponse. Mais cette question indique que bash est la cible du problème.
L'explication est que
find
trouve"$HOME/MySymlinkedPath"
. C'est un lien symbolique, pas un répertoire, donc la descente récursive s'arrête là. Si l'expression correspondait"$HOME/MySymlinkedPath"
(par exemple, dansfind "$HOME/MySymlinkedPath" -name 'My*'
), alorsfind
l'imprimerait comme une correspondance.Comme indiqué ici, j'ai trouvé que le moyen le plus simple / le plus propre de le gérer et de corriger tous les scripts est, au lieu de:
il suffit d'ajouter une barre oblique, de sorte que cela
find
commence non pas par le lien symbolique mais par la cible du lien symbolique:Alternativement, passez l'
-H
option àfind
(notez qu'elle doit venir en premier, avant les chemins) pour lui dire de traverser les liens symboliques passés sur sa ligne de commande. (Ceci est différent de celui-L
qui indiquefind
de traverser également les liens symboliques rencontrés lors de la descente récursive.)Et finalement, cela a mieux fonctionné ici
-L
(en raison des nombreux systèmes de fichiers avec lesquels j'ai créé des liens symboliques via des dossiers). Mais il génère des charges de messages d'erreur non problématiques, j'ai donc ajouté2>/dev/null
; et a également décidé de créer cet aliasalias find='find -L'
:la source