IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Création en cascade récursivement d'un lien symbolique par une ligne de commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 517
    Par défaut Création en cascade récursivement d'un lien symbolique par une ligne de commande
    bonjour,

    je cherche à créer une copie d'un fichier se trouvant à ma racine , vers chacun des dossiers et sous-dossier . pour ne pas avoir à modifier chacun des fichiers copiés quand je modifierai l'original, on me dit de faire un lien symbolique dans chacun des dossiers/sous-dossier plutôt qu'une copie physique.

    Sur un forum j'ai trouvé une ligne de commande qui fait cela mais je ne la comprends pas et j'hésite à l'appliquer.
    est-elle sûre et fait-elle vraiment mon besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type d -exec ln -s $PWD/php.ini {}/php.ini \;
    source : https://moodle.org/mod/forum/discuss...92962#p1655912

    quand pensez-vous ?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Bonjour,

    La commande veut dire:

    Depuis le répertoire courant d'où elle est lancée: créer un lien dans chaque répertoire rencontré de $PWD/php.ini.

    Donc si tu ne te mets pas dans le bon répertoire pour exécuter cette commande, ça risque de ne pas être terrible...

    En plus, je trouve ça bizarre de devoir créer un php.ini dans TOUS les répertoires...

  3. #3
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 517
    Par défaut
    d'accord merci, la création est bien récursive ? ça va bien créer un lien dans le dossier du dossier du dossier .. d'où j'exécute la commande et pas uniquement dans les dossiers de "1er niveau" ? D'habitude pour les commandes récursives que je j'utilise fréquemment on doit toujours spécifier un -r pour la récursivité, donc là ça m'étonne qu'il y en ait pas.


    En plus, je trouve ça bizarre de devoir créer un php.ini dans TOUS les répertoires...
    Problème de serveur mutualisé...ionos.
    https://www.ionos.com/help/hosting/u...ubdirectories/

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Bonjour

    find est récursive par défaut. Si tu ne veux que le premier niveau, il faut ajouter une option.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 873
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par clavier12AZQSWX Voir le message
    pour ne pas avoir à modifier chacun des fichiers copiés quand je modifierai l'original, on me dit de faire un lien symbolique dans chacun des dossiers/sous-dossier plutôt qu'une copie physique.
    Ah ben oui c'est évident. La copie c'est justement une copie donc qui est détachée de l'original. Si ensuite l'original est modifié, la copie ne l'est pas.
    Ensuite les liens symboliques c'est à la fois bon et pas bon. Un lien symbolique c'est un raccourci, donc juste un nom vers un fichier. Si le fichier disparait ensuite, le raccourci (le lien) ne sert plus à rien (tape ln -s xxx yyy; touch xxx; ls -l; rm -f xxx; ls -l. Le premier "ls" te montrera "xxx" et "yyy" en couleurs agréables (probablement en bleu ciel). Le second te montrera "yyy" en rouge parce que xxx n'existe plus.
    L'autre avantage du lien symbolique c'est qu'il peut traverser les filesystems (alors qu'un lien réel c'est deux noms vers une même data donc les noms doivent se trouver dans le même filesystem que la data).
    Et enfin le dernier avantage du lien symbolique c'est qu'on peut le créer sur un répertoire, chose qui n'est pas possible avec les liens réels car si on pouvait lier un fils vers un dossier père, les commandes récursives boucleraient à l'infini. Alors qu'un lien symbolique étant un type différent, ils sont détectables pour éviter justement cet effet.
    Mais si tous ces inconvénients qu'ont les liens réels ne te dérangent pas, alors un lien réel est plus efficace qu'un lien symbolique.
    Car un lien réel entre deux fichiers c'est juste un second nom pointant vers la même zone de data (alors qu'un lien symbolique c'est un nom pointant vers un autre nom). Donc si ensuite le premier fichier disparait, le second fichier continue à être accessible.
    Et la commande est la même => ln. Avec ln -s on crée un lien symbolique tandis qu'avec ln on crée un lien réel.

    Citation Envoyé par clavier12AZQSWX Voir le message
    est-elle sûre et fait-elle vraiment mon besoin
    Pareil, oui et non. Les liens seront crées en absolu (style php.ini -> /home/machin/truc/php.ini). Si ensuite "/home/machin" devient "/home/chose" les liens ne fonctionneront plus. Les noms absolus ont des avantages mais aussi des inconvénients (de même les noms relatifs ont d'autres avantages et d'autres inconvénients). Si maintenant tu apprenais à utiliser find pour l'adapter toi-même à tes besoins que tu connais mieux que nous...

    Citation Envoyé par clavier12AZQSWX Voir le message
    quand pensez-vous ?
    Moi je pense tout le temps. Si maintenant tu ne sais pas écrire correctement "qu'en pensez-vous" alors tu n'as qu'à écrire "qu'est-ce que vous en pensez".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 517
    Par défaut
    bonjour,

    j'ai une question supplémentaire,

    si je veux ensuite supprimer tous les liens symboliques issue du fichier (php.ini ici) sans le fichier lui-même, comment je fais ?

    je me suis mis à la racine, j'ai tenté (après backup) :

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "php.ini" -delete

    mais ça supprime tous les php.ini (fichiers et lien symbolique); n'y-a-t-il pas une option pour ne supprimer QUE les liens symboliques ?

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Indiquer le type en option est-il suffisant pour résoudre ton problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type l -name "php.ini" -delete

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 873
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    mais ça supprime tous les php.ini (fichiers et lien symbolique); n'y-a-t-il pas une option pour ne supprimer QUE les liens symboliques ?
    Oui, et elle est indiquée dans la doc de find => typer le fichier cherché via -type.
    Donc (bis) si maintenant tu apprenais à utiliser find pour l'adapter toi-même à tes besoins que tu connais mieux que nous...? (la première fois c'était une question implicite, là tu remarqueras que je mets un point d'interrogation pour expliciter la question à laquelle j'espère que tu auras la politesse de répondre...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML 4.0] mettre un lien sur toute une ligne de tableau
    Par sizvix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2010, 16h02
  2. Lien fichier distant dans ligne de commande
    Par JMarshall dans le forum Windows
    Réponses: 2
    Dernier message: 17/05/2010, 16h02
  3. Lien de word à une ligne précise dans ma page htm
    Par Aldo831 dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 01/12/2008, 09h47
  4. [HTML] lien hypertext sur une ligne de tableau
    Par BigBarbare dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/05/2006, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo