Partage
  • Partager sur Facebook
  • Partager sur Twitter

Joker * et noms avec espaces

Sujet résolu
    16 avril 2015 à 19:32:02

    Bonjour à tous ! J'ai une question sûrement basique, mais je n'ai pas réussi à trouver la réponse avec Google (je vous promets, j'ai cherché). Voilà le problème : pour rapatrier des fichiers de Windows, j'utilise la commande cp, c'est plus rapide que de cliquer un par un sur chaque fichier. Si je veux tout copier, je fais un cp *, ça marche même avec les fichiers dont le nom comporte un espace. Mais je n'arrive pas à être plus sélectif.

    Je vais prendre un exemple concret (je m'entraîne avec). Mettons que j'ai les fichiers 'truc 2011', 'truc 2012', 'machin 2011', 'machin 2012', 'bidule 2012' et 'bidule 2013'. Je ne veux pas tous les copier, seulement ceux de 2012 ! (C'est concrètement le problème qui m'occupe : sélectionner les fichiers à rapatrier à partir de leur nom.) Voilà ce que j'ai essayé :

    $ cp *2012 cible/

    Je me doutais bien que ça ne marcherait pas à cause des espaces. Message d'erreur : cp: impossible d'évaluer «*2012»: Aucun fichier ou dossier de ce type.

    $ cp '*2012' cible/

    Pas mieux (et même message d'erreur). Pourtant je trouvais ça logique : l'espace est entre guillemets, donc il appartient au nom de fichier. Ou alors :

    $ cp '* 2012' cible/

    Toujours pas ! En lisant de la doc sur le sujet, j'ai compris que c'était plus compliqué. Il m'a semblait qu'il fallait faire :

    $ cp '*\ 2012' cible/

    Eh bien non ! Et pareil si je remplace les simples quotes par des guillemets.

    Heu... c'est possible ? Si oui c'est quoi l'astuce ?


    Erratum : en fait il faut le faire avec des répertoires. J'ai parlé de fichiers pour simplifier, mais avec des fichiers, comme l'a noté dantonq, ça marche.

    -
    Edité par robun 16 avril 2015 à 23:26:47

    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2015 à 22:14:02

      salut,

      non, non. la première commande devrait fonctionner.

      es-tu réellement dans le répertoire où sont les fichiers ?

      • Partager sur Facebook
      • Partager sur Twitter

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

        16 avril 2015 à 23:26:03

        Oups, je me suis mal expliqué, il s'agit en fait de copier des répertoires. Comme je n'y arrivais pas avec les répertoires, j'ai cru que ça ne marchait pas non plus avec les fichiers aussi j'ai donné un exemple avec des fichiers, mais en réalité je l'ai fait avec des répertoires. (Effectivement ça marche avec des fichiers.)

        Donc voici ce que je veux : j'ai des répertoires qui portent des noms du type 'truc 2012' et je veux en déplacer certains dans un répertoire cible. Je viens d'essayer en créant des répertoires bidons et en les remplissant avec des fichiers bidons, tout ce que j'ai décrit plus haut ne marche pas (avec cp -r bien sûr).

        -
        Edité par robun 16 avril 2015 à 23:27:52

        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2015 à 23:45:18

          ???

          ben, non, toujours pas de difficulté à copier des répertoires dont le nom comporte des espaces, en utilisant un astérisque.

          tu dis : «rapatrier des fichiers de Windows»

          tu peux nous en dire plus ?

          est-ce qu'on peut voir la sortie de la commande

          ls -1b #c'est un "un", pas un "L"

          ?

          -
          Edité par dantonq 16 avril 2015 à 23:45:37

          • Partager sur Facebook
          • Partager sur Twitter

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

            17 avril 2015 à 1:01:58

            OK, je précise. J'ai un répertoire 'test' dans lequel j'ai créé des répertoires bidons avec des fichiers vides, c'est juste pour essayer. Voilà le contenu du répertoire. Le but est de copier certains répertoires dans le répertoire 'cible'.

            $ ls -1b
            bidule\ 2012
            bidule\ 2013
            cible
            machin\ 2011
            machin\ 2012
            truc\ 2011
            truc\ 2012

            Essayons (je le fais en même temps) :

            $ cp -r *2012 cible/
            cp: omission du répertoire «bidule 2012»
            cp: omission du répertoire «machin 2012»
            cp: omission du répertoire «truc 2012»
            

            Et il n'y a rien dans le répertoire 'cible'.

            Et c'est pareil avec par exemple

            $ cp -r '* 2012' cible/
            

            (Le but est de copier sur la partition Linux des répertoires créés autrefois sous Windows dont les noms comportent des espaces. Mais peu importe, le problème vient manifestement des espaces. Comme je n'y arrive pas et que je ne veux pas faire de bêtises, je préfère faire des tests.)

             ----

            Re. J'ai trouvé : ce n'est pas cp -r mais cp -R ! Et là ça marche ! Le "man" ne fait pas la différence, et les cours que j'ai trouvés parlaient de l'option -r.

            -
            Edité par robun 17 avril 2015 à 1:32:05

            • Partager sur Facebook
            • Partager sur Twitter
              17 avril 2015 à 1:26:58

              c'est très chelou :
              $ mkdir -p testDir/{{truc,machin}\ 201{1,2},bidule\ 201{2,3},cpDir}
              $ cd testDir/
              $ ls -1
              bidule 2012
              bidule 2013
              cpDir
              machin 2011
              machin 2012
              truc 2011
              truc 2012
              $ cp -r *2012 cpDir/
              $ ls cpDir/
              bidule 2012  machin 2012  truc 2012

              -
              Edité par dantonq 17 avril 2015 à 1:28:18

              • Partager sur Facebook
              • Partager sur Twitter

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

                17 avril 2015 à 1:58:34

                Et voilà que ça marche aussi avec -r ! Là je ne comprends plus (la seule explication plausible est que j'aurais oublié de taper le -r tout à l'heure, ce qui serait vraiment stupide vu le temps que j'ai passé dessus...)

                (En fait il y avait aussi un problème de tirets et je sélectionnais quelque chose du genre cp -r *-2011...)

                -
                Edité par robun 17 avril 2015 à 5:46:17

                • Partager sur Facebook
                • Partager sur Twitter

                Joker * et noms avec espaces

                × 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