|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
bonjour
j'ai un fichier en 1.csv avec séparateur ; et contenant çà: Citation:
si sur la colonne 2 le fichier a.jpg existe dans le répertoire ça copie a.jpg en ext1.jpg ext2.jpg ext3.jpg la même chose pour b.jpg ça copie en ext4.jpg ext5.jpg ect.. je pensais utiliser awk mais je ne sais comment faire après merci pour votre aide |
|
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Bonjour,
Code :
|
||
|
|
10
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
ca ne marche pas j'ai cette erreur
Citation:
|
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Quel shell utilises-tu ?
Peux-tu montrer ton script ? |
|
|
00
|
|
|
#5 | |||
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
j'ai essayé plutot ce fichier refint.sh car je comprends mieux le code
Code :
Citation:
|
|||
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
1. Ne dis pas que ça ne marche pas si tu changes le code
2. donne plus d'informations Code :
|
||
|
|
10
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
merci chardclo.j'ai lancé ton script .il n'y a pas d'erreur mais ca ne copie pas mon fichier a.jpg qui est dans le repertoire /volume1/test/ .
c'est pas un probleme d'interprétation du point entre a et jpg non? |
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Je viens de tester..pas de soucis de mon côté...
par contre, j'ai recopié et modifié bêtement cp $rep_txt$f_s $rep_txt$f_d".jpg" où tu rajoutes l'extension .jpg de ce fait, les fichiers copiés ont une 2nde extension inutile. --> à supprimer du script edit : peux-tu poster les traces obtenues ainsi : sh -x nomscript |
|
|
00
|
|
|
#9 | |||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Tu ne sais donc pas qu'un "test -e fic" peut s'écrire aussi [ -e fic ] mais certainement pas (-e fic ) ??? Et je ne vois pas ce que viennent faire ces accolades !!! Accessoirement, si le fichier se trouve dans le dossier "rep_txt", alors il faut l'inclure dans le test... Code bash :
Accessoirement, je préconiserais plutôt le test -f car pour copier un fichier, faut non seulement qu'il existe mais qu'en plus ce soit un fichier régulier (ce que ne dit pas "test -e")...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||||
|
|
00
|
|
|
#10 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
voici que ce ca donne avec sh -x refint2.sh
syno> sh -x /volume1/test/refint2.sh + rep_txt=/volume1/test/ + fich=1b.csv + IFS=; read f_d f_s ][ -e /volume1/test/a.jpg + IFS=; read f_d f_s ][ -e /volume1/test/a.jpg + IFS=; read f_d f_s ][ -e /volume1/test/a.jpg + IFS=; read f_d f_s ][ -e /volume1/test/b.jpg + IFS=; read f_d f_s ][ -e /volume1/test/b.jpg + IFS=; read f_d f_s ][ -e /volume1/test/c.jpg + IFS=; read f_d f_s Code :
|
||
|
|
00
|
|
|
#11 |
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
peut on avoir le contenu de ton fichier csv ainsi que le résultat de printf '-%s-\n' /volume1/test/*.jpg
|
|
|
00
|
|
|
#12 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
le resultat de printf '-%s-\n' /volume1/test/*.jpg
est Citation:
|
|
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
a mon avis faut mettre quelque chose devant cp
du genre /bin/cp |
|
|
00
|
|
|
#14 | ||
|
Membre actif
![]() Inscription : août 2011 Messages : 44 ![]() |
Citation:
-->cat -e /volume1/test/b1.csv Citation:
d'après les traces, on voit bien qu'il ne tente même pas de copier car il ne trouve pas les fichiers dans /volume1/test ce qui veut dire qu'il y a : - soit un souci dans ton fichier (c'est pourquoi il faudrait le contenu du fichier tel que je te le demande) - soit un souci dans les noms de fichiers sur ton disque (mais à priori, ça ne semble pas être le cas si l'on se fie aux 2ndes traces fournies) +1 pour le -a et non le -e (comme j'avais mis dans ma 1ère réponse) |
||
|
|
00
|
|
|
#15 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
le fichier a l'air bon .J'ai fais plusieurs test avec echo ${rep_txt}${f_s} ca affiche bien correctement .
sinon le resultat de cat /volume1/test/1b.csv est Citation:
cat -e n'est pas reconnu sur mon serveur |
|
|
|
00
|
|
|
#16 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
j'ai utilisé ton code
Code :
+ rep_txt=/volume1/test + fich=1b.csv + read line + echo ext1.jpg;a.jpg + cut -f1 -d; + f_d=ext1.jpg + echo ext1.jpg;a.jpg + cut -f2 -d; + f_s=a.jpg ][ -e /volume1/test/a.jpg + read line + cut -f1 -d; + echo ext2.jpg;a.jpg + f_d=ext2.jpg + echo ext2.jpg;a.jpg + cut -f2 -d; + f_s=a.jpg ][ -e /volume1/test/a.jpg + read line + echo ext3.jpg;a.jpg + cut -f1 -d; + f_d=ext3.jpg + cut -f2 -d; + echo ext3.jpg;a.jpg + f_s=a.jpg ][ -e /volume1/test/a.jpg + read line + echo ext4.jpg;b.jpg + cut -f1 -d; + f_d=ext4.jpg + echo ext4.jpg;b.jpg + cut -f2 -d; + f_s=b.jpg ][ -e /volume1/test/b.jpg + read line + echo ext5.jpg;b.jpg + cut -f1 -d; + f_d=ext5.jpg + echo ext5.jpg;b.jpg + cut -f2 -d; + f_s=b.jpg ][ -e /volume1/test/b.jpg + read line + cut -f1 -d; + echo ext6.jpg;c.jpg + f_d=ext6.jpg + echo ext6.jpg;c.jpg + cut -f2 -d; + f_s=c.jpg ][ -e /volume1/test/c.jpg + read line |
||
|
|
00
|
|
|
#17 | ||||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Je pense en effet que ton fichier csv (créé sous zindow) contient un saut de ligne sous forme "\r\n" ce qui n'est pas la forme attendue sous Unix. Et donc que l'une des deux variable ne contient pas "a.jpg" mais "a.jpg\r". Donc le echo va afficher le contenu de la variable entre crochets (je fais afficher les deux pour simplifier). Si la variable est bien formatée, le crochet apparaitra sur la ligne. Si elle contient un caractère "\r" de trop, le crochet apparaitra dans la ligne du dessous (ce qui apparait d'ailleurs dans l'affichage donné par "set -x"). Si c'est ça, alors te faut convertir ton csv en fichier Unix via l'utilitaire dos2unix... Sûrement pas. Comme on te l'a dit, si cp déconnait tu verrais quand-même le shell tenter de le lancer. De plus, accuser une commande éprouvée est la dernière des choses à faire... Citation:
Code :
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||||
|
|
00
|
|
|
#18 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
ah oui j'ai l'impression.voici ce que ca donne si je rajoute echo "[$f_d] [$f_s]"
Citation:
Citation:
|
||
|
|
00
|
|
|
#19 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2010 Messages : 291 ![]() |
comme la commande dos2unix ne marche pas chez moi j'ai ajouté
perl -pi -e "s/\r\n/\n/g" $fichvoici le bon code qui marche et merci à tous les 2 Code :
|
||
|
|
00
|
|
|
#20 | |||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Si t'es sur un Linux type Debian faut rajouter le package "dosutils" Ok, le perl le fait aussi. Et comme tu as mis une syntaxe sed, je pense que sed aussi aurait pu le faire. Toutefois ce n'est pas la peine de le mettre dans le script !!! Soit tu le converti une fois en dehors du script et ensuite tu l'utilises normalement, soit tu le convertis à la volée dans le script en redirigeant "la volée" dans un pipe de traitement style Code bash :
A+
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com