Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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! smile

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!! big_smile

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! smile

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.

smile

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! :'(

pingouinux a écrit :

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!!! big_smile
Trop bien! (Les concepteurs du bash ont vraiment pensé à tout! )

0000_liste_livres_pdf.txt a écrit :

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:

liste_livres_pdf.txt a écrit :

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 :

cat liste a écrit :

/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