Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lister liens symboliques vers un dossier ?

Sujet résolu
    24 juillet 2022 à 14:04:37

    Bonjour,

    je cherche une commande, je souhaite lister tous les liens symboliques contenus dans un dossier (toujours le même) pointant vers un fichier (à chaque fois différent ou pas) contenu dans un autre dossier (toujours le même).

    Je sais lister tous les liens symboliques contenus dans un dossier.

    Par exemple, si je me trouve dans /usr/bin , alors je tape:

    denebe@localhost:/usr/bin> find . -type l

    Mais chacun d'eux pointe vers un fichier différent ne se trouvant pas forcément dans le même dossier. Concrètement:

    denebe@localhost:/usr/bin> find . -type l | grep ^./ip$
    ./ip
    denebe@localhost:/usr/bin> ll ip
    lrwxrwxrwx 1 root root 10  6. Jun 11:16 ip -> ../sbin/ip
    denebe@localhost:/usr/bin> find . -type l | grep calibre ./calibre denebe@localhost:/usr/bin> ll calibre lrwxrwxrwx 1 root root 20 23. Jul 14:18 calibre -> /opt/calibre/calibre

    ces deux liens symboliques sont dans /usr/bin, le premier pointe vers un fichier du dossier /usr/sbin, alors que le second pointe vers un fichier du dossier /opt/calibre/ .

    Mais comment lister tous les liens symboliques du dossier /usr/bin pointant vers un fichier (à chaque fois différent ou pas…) contenu dans le dossier /opt/calibre ?

    Merci pour votre aide.


    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2022 à 16:01:33

      salut,
      find /usr/bin/ -type l -exec realpath {} + | grep '^/opt/calibre/'
      ?
      • Partager sur Facebook
      • Partager sur Twitter

      "Un problème clairement exposé est à moitié résolu." ·· Pas de questions techniques en MP.

        24 juillet 2022 à 16:14:03

        Merci dantonq,

        ta commande donne "la cible", mais pas le fichier dans /usr/bin/ dont une cible est dans /opt/calibre/

        thierry@toto-PC:~> find /usr/bin/ -type l -exec realpath {} + | grep '^/opt/calibre/'
        /opt/calibre/ebook-convert
        /opt/calibre/calibre-customize
        /opt/calibre/fetch-ebook-metadata
        /opt/calibre/ebook-polish
        /opt/calibre/ebook-edit
        /opt/calibre/calibre-debug
        /opt/calibre/lrfviewer
        /opt/calibre/calibre-server
        /opt/calibre/markdown-calibre
        /opt/calibre/lrs2lrf
        /opt/calibre/ebook-device
        /opt/calibre/lrf2lrs
        /opt/calibre/calibre-smtp
        /opt/calibre/calibre-parallel
        /opt/calibre/calibre
        /opt/calibre/ebook-viewer
        /opt/calibre/calibredb
        /opt/calibre/ebook-meta
        /opt/calibre/web2disk
        



         J'ai commencé comme ça, ça ne marche pas comme il faut, il faut le retravailler…


        thierry@toto-PC:~> find /usr/bin -type l > liste_nom_lien_symbolique
        
        thierry@toto-PC:~> find /usr/bin -type l | xargs ls -l | tr -s ' ' | cut -d ' ' -f 11 > cible_lien_symbolique
        
        thierry@toto-PC:~> paste liste_nom_lien_symbolique cible_lien_symbolique > liste_plus_cible
        
        thierry@toto-PC:~> grep '/opt/calibre/' liste_plus_cible
        /usr/bin/mfplain        /opt/calibre/calibre
        /usr/bin/texluajit      /opt/calibre/calibre-customize
        /usr/bin/rgview /opt/calibre/calibredb
        /usr/bin/node-default   /opt/calibre/calibre-debug
        /usr/bin/mkhybrid       /opt/calibre/calibre-parallel
        /usr/bin/qmlmin /opt/calibre/calibre-server
        /usr/bin/context        /opt/calibre/calibre-smtp
        /usr/bin/jpico  /opt/calibre/ebook-convert
        /usr/bin/netcat /opt/calibre/ebook-device
        /usr/bin/match_parens   /opt/calibre/ebook-edit
        /usr/bin/animate        /opt/calibre/ebook-meta
        /usr/bin/optex  /opt/calibre/ebook-polish
        /usr/bin/bmptoppm       /opt/calibre/ebook-viewer
        /usr/bin/funzip /opt/calibre/fetch-ebook-metadata
        /usr/bin/lnstat /opt/calibre/lrf2lrs
        /usr/bin/sip-module     /opt/calibre/lrfviewer
        /usr/bin/texosquery-jre5        /opt/calibre/lrs2lrf
        /usr/bin/infotocap      /opt/calibre/markdown-calibre
        /usr/bin/mimebzip       /opt/calibre/web2disk
        thierry@toto-PC:~> 

        Ne pas oublier de traiter ce résultat, car chaque ligne contient deux champs, le premier pour le chemin du lien symbolique, le second la cible.

        -
        Edité par DenebeDenebe 24 juillet 2022 à 16:27:07

        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2022 à 16:51:02

          find /usr/bin/ -type l -printf '%p ' -exec realpath {} \; \
             | awk '$2~"/opt/calibre/"{ print $1}'

          ?

          si tu ne veux que le nom du fichier, sans le chemin, remplace %p par %f

          -
          Edité par dantonq 24 juillet 2022 à 16:51:44

          • Partager sur Facebook
          • Partager sur Twitter

          "Un problème clairement exposé est à moitié résolu." ·· Pas de questions techniques en MP.

            24 juillet 2022 à 16:58:55

            Parfait, merci :)

            J'ai compris mon erreur. La commande find de classe pas le résultat. Il faut le faire soir même.

            Donc après la première commande, il en faut une deuxième pour classer.

            find /usr/bin -type l > liste_nom_lien_symbolique

            Je classe:

            sort liste_nom_lien_symbolique > liste_nom_lien_symbolique_sort

            Puis le reste ne change quasiment pas:

            thierry@toto-PC:~> find /usr/bin -type l | xargs ls -l | tr -s ' ' | cut -d ' ' -f 11 > cible_lien_symbolique
            thierry@toto-PC:~> paste liste_nom_lien_symbolique_sort cible_lien_symbolique > liste_plus_cible
            
            thierry@toto-PC:~> grep '/opt/calibre/' liste_plus_cible
            /usr/bin/calibre        /opt/calibre/calibre
            /usr/bin/calibre-customize      /opt/calibre/calibre-customize
            /usr/bin/calibredb      /opt/calibre/calibredb
            /usr/bin/calibre-debug  /opt/calibre/calibre-debug
            /usr/bin/calibre-parallel       /opt/calibre/calibre-parallel
            /usr/bin/calibre-server /opt/calibre/calibre-server
            /usr/bin/calibre-smtp   /opt/calibre/calibre-smtp
            /usr/bin/ebook-convert  /opt/calibre/ebook-convert
            /usr/bin/ebook-device   /opt/calibre/ebook-device
            /usr/bin/ebook-edit     /opt/calibre/ebook-edit
            /usr/bin/ebook-meta     /opt/calibre/ebook-meta
            /usr/bin/ebook-polish   /opt/calibre/ebook-polish
            /usr/bin/ebook-viewer   /opt/calibre/ebook-viewer
            /usr/bin/fetch-ebook-metadata   /opt/calibre/fetch-ebook-metadata
            /usr/bin/lrf2lrs        /opt/calibre/lrf2lrs
            /usr/bin/lrfviewer      /opt/calibre/lrfviewer
            /usr/bin/lrs2lrf        /opt/calibre/lrs2lrf
            /usr/bin/markdown-calibre       /opt/calibre/markdown-calibre
            /usr/bin/web2disk       /opt/calibre/web2disk
            



            C'est moins beau, mais ;)

            -
            Edité par DenebeDenebe 24 juillet 2022 à 22:18:26

            • Partager sur Facebook
            • Partager sur Twitter

            Lister liens symboliques vers un dossier ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown