Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script bash liste des répertoire d'un dossier

Je sais que ça a déjà été abordé mais rien ne marche correctement.

    13 juillet 2021 à 17:01:20

    Bonjour,

    Dans le cadre de sauvegardes de sites web, je fais un petit script pour faire une sauvegarde de chaque répertoire de mon dossier www contenant les sites.

    Je me heurte à un problème pour récupérer cette liste dans une variable.

    J'ai essayé diverses méthode avec plus ou moins de bon résultat mais la méthode la plus simple et efficace reste un bon vieux "ls -d */". En ligne de commande impeccable. Par contre une fois mis dans une variable, je me retrouve avec deux résultats embattant.

    Le premier si je fais de cette manière :

    #/!bin/bash
    
    FOLDER_LIST="ls -d */"
    
    for i in "$FOLDER_LIST"
      do
        echo "${i%%/}" #%%/ pour enlever le slash final
    done

    J'obtiens :

    ls
    -d
    folder1
    folder2
    folder3

    Je ne comprend pas pourquoi ma commande se retrouve inséré comme résultat des deux premières ligne.

    Second cas si j'essaie de mettre un chemin comme "/backupdir/" devant le "*/" j'obtient ça:

    ls
    -d
    /backupdir/folder1
    /backupdir/folder2
    /backupdir/folder3

    Même problème que le premier cas avec la commande plus chemin complet au lieu de simplement le répertoire.

    J'ai essayé avec "echo */", "find" "tree"....

    Merci de m'apporter votre aide car je suis sur le point de m'acheter une moumoute.:lol:


    -
    Edité par SteveRoulier 13 juillet 2021 à 17:03:02

    • Partager sur Facebook
    • Partager sur Twitter
      14 juillet 2021 à 10:52:14

      désolé , erreur de manip

      -
      Edité par cjd 14 juillet 2021 à 10:53:46

      • Partager sur Facebook
      • Partager sur Twitter
        14 juillet 2021 à 12:16:57

        Bonjour,

        Tu confonds encore trop de notion en bash, et tu mélanges un peu tout.

        Ligne 3: Initialisation de la variable FOLDER_LIST avec la chaîne de caractère "ls -d */" (littéralement).

        Ligne 5: Boucle sur le contenu de la variable FOLDER_LIST. À mon avis, mis-à-part si tu as touché des options particulières à Bash, tu n'as pas mis la variable entre guillemets double (contrairement à ce que tu as posté) ce qui fait que «*» est interprété comme un caractère spécial qui fait intervenir le globbing.

        Et donc tu boucles sur une chaînes de caractères toujours avec comme séparateur de champs celui par défaut.

        En d'autres mots, la commande ls n'est jamais exécutée.

        Toutes les solutions que tu as trouvées à base de la commande ls sont de mauvaises solutions (tout n'est pas bon sur internet).

        # exemple d'utilisation globbing
        for i in */; do ls -ld "$i"; done
        # Mieux: utiliser le chemin absolu
        for i in /var/www/*/; do ls -ld "$i"; done

         Attention aux liens symboliques.

        Une autre solution à base de find (ignorant les liens symboliques):

        find /var/www -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 ls -ld

         PS: La substitution de commande se fait avec la syntaxe:

        $(commande)
        • Partager sur Facebook
        • Partager sur Twitter
          14 juillet 2021 à 21:42:07

          Bonjour,

          Merci de ta réponse.

          Même si on ne s'est pas tout a fait compris sur le principe, j'ai pu mixer le tout pour m'ouvrir une solution pas encore parfaite mais au moins ça avance.

          • Partager sur Facebook
          • Partager sur Twitter
            27 juillet 2021 à 8:25:33

            Bonjour,

            J'imagine que tu as du bien avancé, mais pourquoi ne pas regarder du coté de cron et rsync?

            • Partager sur Facebook
            • Partager sur Twitter

            Script bash liste des répertoire d'un dossier

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