Partage
  • Partager sur Facebook
  • Partager sur Twitter

script shell find

Sujet résolu
    19 octobre 2021 à 18:26:35

    bonjour

    il y a quelque chose que je n'explique pas.

    j'ai fait ce script :

    #!/bin/sh
    
    name=mon_dossier
    n=`find $name -name "*.zip" -print 2> /dev/null | wc -l`
    echo $n

    n vaut 0

    maintenant si dans un shell je tape les commandes :

    [mon_shell] $ name=mon_dossier
    [mon_shell] $ n=`find $name -name "*.zip" -print 2> /dev/null | wc -l`
    [mon_shell] $ echo $n

    n vaut 1

    en gros mon script ne marche pas, mais ce sont les mêmes commandes que celles que je tape dans le shell

    -
    Edité par TagAda7 19 octobre 2021 à 18:46:34

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2021 à 18:52:20

      salut,

      où est ton script, et comment l'exécutes-tu ?

      où est le fichier .zip ?

      --

      `...` est une forme désuète de Substitution de commande

      les variables doivent toujours être entre guillemets

      -print est l'action par défaut de find; s'il n'y a rien d'autre à faire c'est inutile de l'inscrire.

      Attention ! si le nom d'un fichier contient un alinéa, wc -l retournera 2 alors qu'il n'y a qu'un seul fichier.

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        19 octobre 2021 à 18:59:19

        mon script est dans mon home.

        la variable name contient un chemin absolu. j'ai mis mon_dossier, mais en réalité, elle a pour valeur : 

        /home/camille/informatique/data/python/box/upload/pj

        le fichier zip est dans le dossier /home/camille/informatique/data/python/box/upload/pj

        j'ai essayé de remplacer comme ceci, mais ca ne fonctionne toujours pas :

        #!/bin/sh
         
        name=/home/camille/informatique/data/python/box/upload/pj
        n=$(find "$name" -name "*.zip" 2> /dev/null | wc -l)
        echo $n

        ce qui est bizarre, c'est que les mêmes commandes fonctionnent dans un shell mais pas dans un script

        j'execute mon script ainsi :

        ./script.sh

        -
        Edité par TagAda7 19 octobre 2021 à 19:11:34

        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2021 à 19:15:39

          n=$find "$name" -name "*.zip" 2> /dev/null | wc -l`

          ???

          fait afficher le résultat de find, sans redirection, et sans wc -l, en dehors de la Substitution de commande

          montre-nous le résultat de /bin/sh -x ./monScript, qu'on voit ce qu'il se passe à l'intérieur lors de l'exécution :)

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            19 octobre 2021 à 19:26:51

            bon je viens de tester juste comme ça et ca fonctionne.

            je vais te poster le code en entier :D

            #!/bin/sh
            
            DIR_SEARCH=/home/camille/informatique/data/python/box/upload/pj
            
            while read line; do
                ID=`echo $line | sed 's/./&\//g'`
                name="$DIR_SEARCH/$ID"
            
                if [ $(find "$name" -name "*.zip" 2> /dev/null | wc -l) -ne 0 ]; then
                    echo $line
                fi
            done < input.csv

            celui ci ne fonctionne pas.

            je pense que c'est à cause du awk.

            en gros, j'ai une chaine de caractere "ABCDE", que j'aimerais transformé e "A/B/C/D/E/"

            • Partager sur Facebook
            • Partager sur Twitter
              19 octobre 2021 à 20:11:49

              où ça awk ?

              mais pourquoi 

              while read subDir
              do
                 find "$searchDir/$subDir" -name '*.zip' ...
              done < <(sed 's/./\//g' fichier.csv)

              il faudrait nous montrer le fichier CSV.

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                19 octobre 2021 à 21:03:45

                pardon, je parlais de sed.

                mon fichier csv :

                ZEUZ2
                Z62Z2
                Z83JD
                Z1KD2
                Z81JD
                ZOD93
                ...

                il me dit :

                syntax error near unexpected token `<'
                `done < <(sed 's/./\//g' input.csv)'



                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2021 à 21:16:11

                  ah, zut ! tu es sur du /bin/sh; en effet, ça ne fonctionne qu'avec des shells plus évolués (bash, ksh...).
                  sed 's/./\//g' fichier.csv | while read subDir
                  do
                     find "$searchDir/$subDir" -name '*.zip' ...
                  done

                  PS: sans séparateur, on ne peut pas vraiment parler de "csv".

                  -
                  Edité par dantonq 19 octobre 2021 à 21:19:38

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    19 octobre 2021 à 21:47:49

                    exact, avec bash ça fonctionne.

                    merci beaucoup :)

                    • Partager sur Facebook
                    • Partager sur Twitter

                    script shell find

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown