Espeace dans nom de fichier
mystere689
-
mystere689_tahiti Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
mystere689_tahiti Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Espeace dans nom de fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
5 réponses
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.
Donc au lieu de "mes documents", tu dois écrire "mes\ documents", tout simplement ;)
Cordialement.
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.
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.
Salut,
Il suffit de double-quoter la variable :
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]$;-))
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 ????
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 ????
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
#!/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