Espeace dans nom de fichier

Bonjour,

J'ai des fichiers avec des nom d'espace dedans. Dans les script sh, la plupart de mes commandes ne reconnaisse pas par exemple "mes documents". Ce nom est interprété comme "mes".

en ligne de commande, un simple exemple :
TOTO="/tmp/mirroir/user/mes documents"
mkdir -p $TOTO

Cela me crée le répertoire /tmp/mirroir/mes

Comment faire pour que les nom soient pris en compte ????? Un bash de 2 ligne est ca fct pas, je rage

Merci de votre aide,

PS :Ne me dit pas de ne pas utiliser l'espace, car les dossier à récuérer sont dans le profile SAMBA de l'utilisateur qui est stocker sur l'ordi et c'est pas moi qui crée ces noms.
Configuration: Linux
SME Serveur basé sur RED HAT/FEDORA

5 réponses

  1. Contributeur
    Il suffit d'échapper le caractère qui pose problème (espace) avec un anti-slash.

    Donc au lieu de "mes documents", tu dois écrire "mes\ documents", tout simplement ;)

    Cordialement.
    0
    1. Salut,
      Tu peux vérifier le contenu de la variable $TOTO en faisant un echo de celle-ci.

      En fait, avec un caractère d'échappement cela ne suffit pas.

      Voici ce qu'il faut faire :
      1 - définiti $TOTO
      TOTO="Path\to\Mes Documents"
      echo $TOTO (pour vérifier)

      ensuite lorsque tu fais le mkdir -p il faut encadrer $TOTO par ""

      mkdir -p "$TOTO"

      Voici en gros ce que ça donne :

      jonas@LENOVO ~/home$ TOTO="rep5/Test dossier

      jonas@LENOVO ~/home$ echo $TOTO
      rep5/Test dossier

      jonas@LENOVO ~/home$ mkdir -p "$TOTO"

      jonas@LENOVO ~/home$ ls rep5
      Test dossier

      jonas@LENOVO ~/home$

      Bon courage à toi.
      Jonas.
      0
      1. Modérateur
        Salut,

        Il suffit de double-quoter la variable :
        [tmpfs]$ ls
        Mes Documents/
        [tmpfs]$ var=$(ls)
        [tmpfs]$ echo $var
        Mes Documents/
        [tmpfs]$ rm -rf $var
        [tmpfs]$ ls
        Mes Documents/
        [tmpfs]$ rm -rf "$var"
        [tmpfs]$ ls
        [tmpfs]$   
        ;-))
        0
        1. Merci à tous de vos réponses. effectivement avec le post de jipicy cela fonctionne en ligne de commande, mais j'ai du mal à l'intégrer dans mon batch. en fait le probleme est le suivant; crée un double de l'arboresence de /samba/probile/<utilisateur> mais en ne prennant que le dossier Bureau et "Mes documents" (le fameux dossier qui m'embete).

          voila la partie du scripte qui devait réalisé cela :
          #!/bin/sh
          #LISTE=$(find "/tmp/mirroir/2009-05-12/files/samba/profiles" \( -iname Bureau -or -iname 'Mes Documents' \) -type d | sed -e "s/Mes\ documents/\"Mes_documents\"/")
          #echo $LISTE
          for file in $(find "/tmp/mirroir/2009-05-12/files/samba/profiles" \( -iname Bureau -or -iname 'Mes Documents' \) -type d | sed -e "s/Mes\ documents/Mes_documents/") #$(find "/tmp/mirroir/2009-05-12/files/samba/profiles" \( -iname Bureau -or -iname 'Mes Documents' \)
          do
          FICHIER_SOURCE=$file
          FICHIER_DEST=$(echo "\"$file\"" | sed -e "s/samba/samba2/;s/Mes_documents/Mes documents/")
          echo "$FICHIER_DEST"
          mkdir -p $FICHIER_DEST
          #cp -rf -reply=yes $FICHIER_SOURCE $FICHIER_DEST/.. >>/tmp/rsync_script_tmpfile
          done

          cela me donne en sortie console (grace à "echo") :
          "/tmp/mirroir/2009-05-12/files/samba2/profiles/teinab/Bureau"
          "/tmp/mirroir/2009-05-12/files/samba2/profiles/reat/Mes documents"
          "/tmp/mirroir/2009-05-12/files/samba2/profiles/jaryt/Mes documents"
          "/tmp/mirroir/2009-05-12/files/samba2/profiles/maretat/Bureau"

          mais aucun répertoire de se crée. Comment faire ????
          0
          1. finalement ceci à l'air de répondre à mon problème :

            #!/bin/sh
            # on enleve l'epace car c'est le séparateur pour for dans une liste
            for file in $(find "/tmp/mirroir/2009-05-12/files/samba/profiles" \( -iname Bureau -or -iname 'Mes Documents' \) -type d | sed -e "s/Mes\ documents/Mes_documents/")
            do
            FICHIER_SOURCE=$file
            # on remet l'espace
            FICHIER_DEST=$(echo "$file" | sed -e "s/samba/samba2/;s/Mes_documents/Mes documents/")
            echo $FICHIER_DEST
            mkdir -p "$FICHIER_DEST" # merci jypicy
            #cp -rf -reply=yes $FICHIER_SOURCE $FICHIER_DEST/.. >>/tmp/rsync_script_tmpfile # pas testé encore
            done
            0