Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question suppression de fichier

    31 janvier 2015 à 18:16:41

    Re Bonjour,

    Je reviens vous poser une question :)

    J'ai écrit un petit programme qui liste les fichiers du répertoire courant, mais qui ajoute un numéro devant chaque fichiers, voici mon code:

    pwd= « $chemin »
    echo $chemin
    
    j=1
    for i in *
    do
    echo « $j)$i »
    j=$((j+1))
    done
    

    Maintenant, je souhaite, écrire un programme avec diverses fonctions, dont une qui supprime un fichier. Une fois listé, j'écrit le numéro du fichier que je souhaite effacer, et ensuite il supprime celui-ci. Mais quand j'éxécute mon code, il ne le supprime pas, voici mon code:

    pwd= « $chemin »
    echo $chemin
    
    j=1
    for i in *
    do
    echo « $j)$i »
    j=$((j+1))
    done
    
    function supprimerFichier
    {
    echo "quel fichier ?"
    read j
    rm -f $j
    echo "fichier delete"
    }
    
    echo " 2- supprimer un fichier"
    read choix
    
    case "$choix" in
    2) supprimerFichier;;
    
    esac


    Si dans mon rm, je met par exemple $fichier, et qu'ensuite une fois éxécuté, je lui indique directement le nom du fichier à supprimé, par exemple, test.txt, là ça fonctionne, mais quand je souhaite récupérer la variable j qui contient le numéro, ça ne fonctionne pas.

    C'est plus simple, de mettre directement le numéro que de mettre le nom du fichier.

    Merci d'avance.

    -
    Edité par Coralie77 31 janvier 2015 à 18:17:53

    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2015 à 18:55:28

      Dans ta fonction tu demandes à l'utilisateur le numéro du fichier, et tu exécutes rm -f sur le numéro. En gros si l'utilisateur entre '5', ta fonction va essayer de supprimer un fichier qui porte le nom '5'.

      Si tu entres le nom du fichier ça marchera très bien.

      -
      Edité par LoupSolitaire 31 janvier 2015 à 18:56:12

      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        31 janvier 2015 à 20:45:38

        Mais je ne souhaite pas entrer le nom du fichier directement comme par exemple test.txt...

        J'affiche la liste des fichiers suivi d'un numéro grâce au petit bout de code du début j'obtient donc ça:

        1) test.txt

        2) fichier.txt

        3) toto.txt

        ...

        Je souhaite donc, pouvoir entrer le chiffre 2 par exemple, et qu'il me supprime "fichier.txt"

        • Partager sur Facebook
        • Partager sur Twitter
          31 janvier 2015 à 21:12:09

          Ouais, j'ai bien compris, et c'est pas très compliqué dans le principe : tu peux par exemple garder en mémoire les noms de fichiers et le numbre associé, et retrouver le nom de fichier associé au numéro après que l'utilisateur ait entré le numéro du fichier choisi.

          EDIT : Je suppose que c'est un exercice scolaire ? Tu as vu les tableaux (arrays) ? Parce que ça peut aider dans ce cas.

          -
          Edité par LoupSolitaire 31 janvier 2015 à 21:14:40

          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            31 janvier 2015 à 21:21:51

            Non ce n'est pas un exercice scolaire, dans le cadre de mon apprentissage, je dois gérer des fichiers sur un serveur linux, et je dois donc créer un petit shell. Non je n'ai pas vu les tableaux.

            Mais, montre moi un début de code quand même pour expliquer un peu mieux ce que tu dis à propos de garder en mémoir les noms, le nombre associé etc...

            • Partager sur Facebook
            • Partager sur Twitter
              31 janvier 2015 à 21:27:19

              http://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/afficher-et-manipuler-des-variables

              Sur cette page il y a un bon résumé sur les tableaux en bash. En encore plus résumé le tableau associe un indice (numéro) à une valeur, ce qui me semble coller parfaitement à ce que tu cherches à faire.

              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                1 février 2015 à 10:26:03

                Oui, mais, comment je stocke ma variable j (qui contient le numéro) dans un tableau.

                tableau=('$j')
                j=1
                for i in *
                do
                echo « $j)$i »
                j=$((j+1))
                done

                Je rajoute cette ligne ?

                Et ensuite, mon read et rm, je les laisse tel quel ? Donc, read j, rm -f $j ?

                • Partager sur Facebook
                • Partager sur Twitter
                  1 février 2015 à 15:12:52

                  Faut que tu apprennes à tester et debugguer en fait je crois. Si tu fais le test tu verras que le code fonctionne pas. N'hésite pas à exécuter juste des morceaux de script pour voir s'ils fonctionnent comme tu l'espère, et d'ajouter des "echo" aux endroits stratégiques pour voir si les variables contiennent bien ce que tu attends.

                  Au passage, pense à indenter un peu le code aussi.

                  Je te file le bout de code avec boucle pour créer un tableau avec les noms de fichiers même si je pense pas que ça t'aide réellement :

                  FICHIERS=()
                  
                  i=0
                  for fic in *
                  do
                      FICHIERS[$i]=$fic 
                      echo ${FICHIERS[$i]}
                      i=$((i + 1))
                  done
                  

                  Maintenant il existe un truc un peu plus concis qui fait exactement le même travail :

                  FICHIERS=(*)

                  Pas besoin de stocker deux variables dans le cas du tableau, le tableau par nature est numéroté (en partant de 0, et pas de 1).

                  Maintenant pour supprimer le fichier après que l'utilisateur ait entré le nombre, il suffit d'aller chercher la correspondance dans le tableau.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Blond, bouclé, toujours le sourire aux lèvres...

                    1 février 2015 à 16:04:30

                    Donc, je fait une fonction lister, qui contiendras ton bout de code.

                    Ensuite, dans ma fonction supprimer, je fait un rm sur quoi ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 février 2015 à 17:01:41

                      Je suis pas certain de comprendre, manifestement tu n'as aucune base en programmation, on te demande de faire un script shell de gestion de fichiers qui n'a aucun intérêt et qui ressemble fortement à un exercice totalement scolaire dans le cadre d'un apprentissage ?

                      L'histoire colle pas, et j'ai le sentiment que tu attends juste qu'on te refile la solution sans que tu aies besoin de réfléchir.

                      Bref, quoi qu'il en soit je pense que ça ne te ferait pas de mal de voir les bases en suivant un petit tuto sur bash et de faire quelques exercices corrigés.

                      Je vais quand même répondre à ta question de façon plus spécifique : le rm il faut le faire sur le nom de fichier bien entendu, et comme tu as le numéro du fichier fourni par l'utilisateur et un tableau avec les noms de fichiers associés à leur indice (=numéro), tu devrais pouvoir arriver à quelque chose avec tout ça sans qu'on te donne le code tout fait.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Blond, bouclé, toujours le sourire aux lèvres...

                      Question suppression de fichier

                      × 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