#1 Le 31/07/2013, à 15:22
- MrFaelivrin
[RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Bonjour tout le monde je vous expose un problème bizarre que je viens de rencontrer dans un de mes scripts.
Je veux accéder à un dossier qui contient des espaces.
Donc naturellement, on fait:
cd Nouvelles\ -\ Contes
Sauf que là, c'est avec une variable qu'on s'y prend. (je rentre pas dans les détails de mon script)
#! /bin/sh
#On va dans le dossier de travail.
research=$1;
foldername=$1;
echo "research="${research};
#Le déplacement dans le dossier ne peut s'effectuer avec un espace..
#foldername=$(echo ${foldername} | sed s/' '/'\\ '/g);
#echo "foldername="${foldername};
foldername=$(echo ${foldername} | sed s/' '/'\ '/g);
foldername=$(echo ${foldername} | sed s/'-'/'\\- '/g);
echo ${foldername};
cd ${foldername};
#echo ${foldername} | cd;
Résultat de cette partie:
research=Nouvelles\ -\ Contes
Nouvelles\ \- \ Contes
./insertion.sh: 18: cd: can't cd to Nouvelles\
awk: not an option: -\
j'ai TOUT essayé! ^^ (MAIS PAS LA BONNE SOLUTION.. Aurais-je sauté la SOLUTION?)
Mais normalement le "-" n'a pas besoin d'être échapper! Et là il pense que c'est une option.
Il prend que le début comme on peut le constater après l'espace il considère que c'est un autre argument!
S'il vous plait aider moi.
Je voudrais terminer ça avant de quitter mon entreprise vendredi.
Dernière modification par MrFaelivrin (Le 31/07/2013, à 16:54)
Hors ligne
#2 Le 31/07/2013, à 15:37
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Bonjour,
Ceci devrait faire l'affaire :
foldername="$1"
cd "$foldername"
Hors ligne
#3 Le 31/07/2013, à 15:37
- ssdg
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
euh, cd "${foldername}" ?
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#4 Le 31/07/2013, à 15:38
- Shanx
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Salut
Essaie avec :
cd "$foldername";
EDIT : grillé par ssdg. Par contre, les accolades ne sont nécessaires que si la variable est accolée à un autre mot, donc ici on peut les enlever.
EDITbis : ah, j’avais pas vu, j’ai aussi été grillé par pingouinux. Décidément, je dégaine pas assez vite.
Dernière modification par Shanx (Le 31/07/2013, à 15:41)
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#5 Le 31/07/2013, à 16:06
- MrFaelivrin
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Oh my goood!!
Et l'échappement se fait TOUT SEUL!!
Même pas besoin de faire un sed!
Oh Mon Dieuu!!
Je vous aime!!
C'était trop évident!
Donc cd "$foldername";
Ca marche.. pour l'instant!
Merci beaucoup!
Maintenant, je retrouve un problème similaire avec cette commande:
awk -v value=${research} -F "\t" '$5==value { print $2;}' ~/Bureau/ebooks_ELG.csv | sort | uniq > ./0000_liste_auteurs.txt
Tout fonctionne jusqu'à ce qu'on arrive dans les dossiers avec des espaces.
EDIT:
Finalement le problème est résolu en mettant des ".
awk -v value="${research}" -F "\t" '$5==value { print $2;}' ~/Bureau/ebooks_ELG.csv | sort | uniq > ./0000_liste_auteurs.txt
Merci beaucoup!!
Hors ligne
#6 Le 31/07/2013, à 16:08
- Shanx
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Si ton problème est résolu, tu peux modifier ton premier message et ajouter [Résolu] au titre.
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#7 Le 31/07/2013, à 16:11
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Tu peux remplacer
| sort | uniq
par
| sort -u
Hors ligne
#8 Le 01/08/2013, à 10:25
- MrFaelivrin
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Merci pingouinux ca m'évitera les commandes à rallonge!
J'ai un peu de mal avec l'échappement en BASH, et je vous voulais soulever une dernière question.
Je fais comment si je veux copier d'un autre dossier dans le dossier courant des fichiers qui contiennent des espaces?
awk -F "\t" '{chaine=$0; gsub(/ /,"\\ ",chaine); system("cp ~/Bureau/book_box/pdf/"chaine" ./");}' ./0000_liste_livres_pdf.txt
EDIT:
Pour mon cas, j'ai remarqué que je n'avais pas ce problème puisque tous les espaces sont remplacés par des "_"(underscores).
Mais il peut être intéressant de savoir comment résoudre ce problème si cela devait m'arriver à moi ou à quelqu'un d'autre.
Dernière modification par MrFaelivrin (Le 01/08/2013, à 11:56)
Hors ligne
#9 Le 01/08/2013, à 11:28
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Que contient chaque ligne du fichier ./0000_liste_livres_pdf.txt ?
Dernière modification par pingouinux (Le 01/08/2013, à 11:36)
Hors ligne
#10 Le 01/08/2013, à 11:43
- MrFaelivrin
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Elle contient tout d'abord des url de livres que j'ai filtrées en fonction de la catégorie et de l'auteur qu'on peut télécharger. (docs.pdf)
Ensuite je supprime la partie de l'url qui ne nous intéresse pas.
Je ne sais pas si ça devrait faire l'objet d'un nouveau topic mais j'ai remarqué quelque chose avec la commande mkdir.
mkdir " ---" fonctionne..
mais mkdir "---" non.
Quand il y a un espace c'est bon...
Mais quand il n'y en n'a pas... bah.. c'est pas bon. :s
Presque problématique quand dans un fichier csv on retrouve des catégories type: "---"
Obliger de faire appel aux REGEX. C'est un peu triste je trouve. ^^
Dernière modification par MrFaelivrin (Le 01/08/2013, à 11:43)
Hors ligne
#11 Le 01/08/2013, à 11:53
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Peux-tu montrer une ligne du fichier, et la commande cp que tu veux exécuter à partir de cette ligne ?
mkdir " ---" fonctionne..
mais mkdir "---" non.
mkdir -- "---"
D'une façon générale, dans les commandes bash, -- indique la fin des options.
Hors ligne
#12 Le 01/08/2013, à 12:01
- MrFaelivrin
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
D'une façon générale, dans les commandes bash, -- indique la fin des options.
Je le savais pas du tout!! C'est trop pratique!!!
Trop bien! (Les concepteurs du bash ont vraiment pensé à tout! )
chansons_paillardes.pdf
Commande cp affectée:
awk -F "\t" '{ system("cp ~/Bureau/book_box/pdf/"$0" ./pdf/");}' ./0000_liste_livres_pdf.txt
Pour tout mon projet il n'y aura jamais de problèmes.
Cependant si j'avais le contenu de fichier:
chansons paillardes.pdf
Je ne suis pas sûr que mon script fonctionnerait. ^^
Dernière modification par MrFaelivrin (Le 01/08/2013, à 12:02)
Hors ligne
#13 Le 01/08/2013, à 12:09
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
while read chaine; do cp ~/Bureau/book_box/pdf/"$chaine" .; done <./0000_liste_livres_pdf.txt
Édité :
Tes commandes awk en #8 et #12 ne sont pas cohérentes (répertoires de destination respectivement ./ et ./pdf/)
Dernière modification par pingouinux (Le 01/08/2013, à 12:16)
Hors ligne
#14 Le 01/08/2013, à 12:26
- MrFaelivrin
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Oui elles ne sont pas cohérentes. J'ai corrigé mon code entre temps. ^^
Et je ne l'ai pas précisé sur le topic.
while read chaine; do cp ~/Bureau/book_box/pdf/"$chaine" .; done <./0000_liste_livres_pdf.txt
Je ne suis pas habitué à cette syntaxe.
Dans la boucle while on met en entrée ma liste, on la lit et on stocke dans une variable bash (chaine).
Après on copie colle. Et avec awk, il y a un problème?
Hors ligne
#15 Le 01/08/2013, à 12:41
- pingouinux
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Et avec awk, il y a un problème?
Non, mais tu es obligé de jongler avec les ", et tu fais un appel système à chaque ligne de ton fichier.
Remarque : Dans ton cas, comme tu n'utilises que $0 (et non $1, $2…), -F "\t" ne sert à rien.
Hors ligne
#16 Le 01/08/2013, à 14:08
- Postmortem
Re : [RESOLU] Echapper les espaces avec cd! AU SECOURS! :'(
Salut,
Avec ce fichier d'entrée :
/tmp/test/my source/ti ti
/tmp/test/my source/to to
awk '{system("cp \""$0"\" \"/tmp/test/my dest\"")}' liste
Ça fait beaucoup de \" !!
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne