Espeace dans nom de fichier

mystere689 -  
mystere689_tahiti Messages postés 6 Statut Membre -
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. Franzux Messages postés 9705 Statut Contributeur 1 146
     
    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
  2. jivef Messages postés 1024 Statut Membre 306
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. mystere689_tahiti Messages postés 6 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mystere689_tahiti Messages postés 6 Statut Membre
     
    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