# Terminal | Problème avec 'curl'



## sylver (23 Septembre 2003)

Bonjour à tous.

J'ai trouvé récemment un site qui proposait de télécharger des MP3 (en toute légalité). Seulement le nombre de ces MP3 est élevé (une cinquantaine) et sont nommés selon le motif suivant :
01.MP3
02.MP3
03.MP3
...
48.MP3
49.MP3

Alors, malin comme je suis, je me dit qu'au lieu de faire "clic-droit / télécharger" sur chaque lien, je vais utiliser la commande *curl*.
En effet, d'après la page du manuel http://www.hmug.org/man/1/curl.html on peut spécifier un motif dans l'url à rapatrier pour télécharger plusieurs fichiers en une seule commande.
http://www.hmug.org/man/1/curl.html
<font class="small">Code:</font><hr /><pre>       You can specify multiple URLs or parts of URLs by  writing
       part sets within braces as in:

        http://site.{one,two,three}.com

       or  you  can get sequences of alphanumeric series by using
       [] as in:

ftp://ftp.numericals.com/file[1-100].txt
ftp://ftp.numericals.com/file[001-100].txt    (with lead-
       ing zeros)
ftp://ftp.letters.com/file[a-z].txt

       It  is  possible  to  specify up to 9 sets or series for a
       URL, but no nesting is supported at the moment:

http://www.any.org/archive[1996-1999]/vol-
       ume[1-4]part{a,b,c,index}.html</pre><hr />

Comme je désire enregistrer ces fichiers sous un nom spécifique, j'utilise l'option -o qui permet de renommer les fichiers.
<font class="small">Code:</font><hr /><pre>       -o/--output &lt;file&gt;
              Write  output  to  &lt;file&gt; instead of stdout. If you
              are using {} or [] to fetch multiple documents, you
              can  use  '#'  followed  by  a number in the &lt;file&gt;
              specifier. That variable will be replaced with  the
              current string for the URL being fetched. Like in:

                curl http://{one,two}.site.com -o "file_#1.txt"

              or use several variables like:

                curl http://{site,host}.host[1-5].com -o "#1_#2"

              You  may  use this option as many times as you have
              number of URLs.</pre><hr />

Si je comprends bien le manuel, en utilisant leur premier exemple
curl http://{one,two}.site.com -o "file_#1.txt"
cela devrait donner deux fichiers nommés respectivement
file_one.txt
file_two.txt
Donc en fait pour chaque fichier, le #1 est remplacé par la partie placée dans les accolades de l'url étant actuellement téléchargée.
J'ai bon ?

Je voudrais utiliser la commande suivante :
curl .MP3]http://www.musique.com/mp3/[01-49].MP3 -o "chanson_#1.mp3"
ce qui devrait donc, si j'ai bien compris, télécharger tous les morceaux de 01.MP3 à 49.MP3 dans mon dossier courant, et chaque morceau serait renommé en "chanson_" puis le numéro correspondant et ".mp3"
chanson_01.mp3
...
chanson_02.mp3

Or je n'ai rien de tout ça. La commande *curl* a des comportements bizarres.
Avec la commande
curl .MP3]http://www.musique.com/mp3/[01-49].MP3 -o "chanson_#1.mp3"
il me dit "No match".
Pourtant, si je fais
curl http://www.musique.com/mp3/01.MP3 -O
ça passe sans problème (l'option -O télécharge le fichier dans le répertoire courant avec le nom d'origine).
Alors je me dis "tant pis pour le renommage" et je tappe alors
curl .MP3]http://www.musique.com/mp3/[01-49].MP3 -O
Et là de nouveau "No match".

Je fais des tests avec les accolades, pour voir.
En tapant
curl http://www.musique.com/mp3/{48,49}.MP3 -o "chanson_#1.mp3"
il m'enregistre le fichier 48.MP3 sous le nom "chanson_1.mp3" et dès que le téléchargement de la première est terminée, il m'affiche toutes sortes de caractères cabalistiques. En fait j'ai l'impression que la seconde chanson est bien téléchargée mais qu'au lieu de la rediriger dans un fichier (comme le spécifie la commande) il la crache sur la sortie standard.
J'ai le même problème avec la commande
curl http://www.musique.com/mp3/{48,49}.MP3 -O

Bref, je ne comprends rien, soit la commande est buggé, soit c'est OS X qui est buggé, soit c'est moi qui n'a rien compris du tout de que dalle à la façon d'utiliser curl.


Voilà, c'est long comme sujet (surtout que c'est mon premier), mais j'ai essayé de décrire au mieux. Si vous pouviez m'aider, ce serait sympa.
Merci d'avoir lu jusqu'au bout.


----------



## Bilbo (23 Septembre 2003)

Bienvenue sylver. 
	

	
	
		
		

		
			






```
curl [url]http://www.musique.com/mp3/[/url][01-49].MP3 -O
```
Celle-là est la bonne pour peu que le répertoire "mp3" existe sur le serveur "www.musique.com" et que les fichiers 01.MP3, 02.MP3, etc. existent dans ce répertoire.

Tu t'es probablement trompé dans les adresses. Les minuscules/majuscules ont leur importance.

À+


----------



## sylver (24 Septembre 2003)

Hello

Merci pour l'accueil 
	

	
	
		
		

		
		
	


	




J'ai bien essayé la commande que tu donnes, et j'ai vérifié l'url à plusieurs reprises, mais rien n'y fait. J'ai toujours un "No match".

Voilà le répertoire web duquel je veux télécharger les mp3 :
http://john.bonobo.mp3.free.fr/mp3/

et voilà la commande que je tape dans le terminal :


```
curl [url]http://john.bonobo.mp3.free.fr/mp3/[/url][21-49].MP3 -O
```

je mets [21-49] parce que j'ai déjà télécharger les 20 premiers 1 par 1 en voulant faire des essais.

Je ne comprends vraiment pas ce qui ne va pas. Peut-être est-ce une configuration de ma machine ? Ou peut-être est-ce à cause de free ?


----------



## Bilbo (24 Septembre 2003)

sylver a dit:
			
		

> curl .MP3]http://john.bonobo.mp3.free.fr/mp3/[21-49].MP3 -O


Tu as un problème, chez moi ça gazouille. 
	

	
	
		
		

		
		
	


	




 J'ai testé avec le curl de Fink et celui livré avec Mac OS 10.2.6.

À+


----------



## sylver (26 Septembre 2003)

Pfff, ça prend la tête. J'ai pourtant tout bien vérifié (noms du serveur et des fichiers), rien à faire.

Tu aurais une idée d'où ça peut venir ?

En tout cas merci beaucoup d'avoir essayé...


----------



## sylver (26 Septembre 2003)

*J'ai trouvé !* 

En fait il suffisait d'entourer l'url avec des doubles quotes " de cette manière

curl "http://john.bonobo.mp3.free.fr/mp3/[21-49].MP3" -O

et ça marche !
Je ne comprends pas trop pourquoi il faut mettre ces quotes, mais j'ai essayer plein de trucs au hasard et ça a marché avec des quotes. Le manuel n'en parle pas, bizarre.

Du coup, j'ai même pu utiliser l'option -o pour renommer mes fichiers à la volée.

Espérons que ce post puisse un jour servir à quelqu'un.


----------



## Bilbo (26 Septembre 2003)

sylver a dit:
			
		

> *J'ai trouvé !*



Tant mieux. 
	

	
	
		
		

		
		
	


	




Chez moi ça marchait parce-que j'utilise "/bin/bash" comme shell. Le shell par défaut de Mac OS X est "/bin/tcsh" et en effet, là ça ne marche pas. Tu peux changer ton shell par défaut dans "/Applications/Utilities/NetInfo Manager" -&gt; Rubrique "users -&gt; ton identifiant".

À+


----------



## quark67 (29 Septembre 2003)

sylver a dit:
			
		

> *J'ai trouvé !*
> 
> En fait il suffisait d'entourer l'url avec des doubles quotes " de cette manière
> 
> ...



Désolé d'avoir lu ton message si tard, sinon je t'aurais mis sur la piste des guillemets.
Mais je n'ai aucun mérite, je l'ai appris dans la revue "Précision Mac", disparue par manque de lecteurs 
	

	
	
		
		

		
		
	


	




.


----------



## sylver (2 Octobre 2003)

Merci à tous les deux, même si j'ai trouvé tout seul ^^

Je vais voir pour éventuellement changer de shell.

Sinon, je trouve aussi très malheureux que Précision Mac ait disparu, c'était selon moi la meilleure lecture mac (un peu technique, certes, mais toujours compréhensible).


----------



## Bilbo (2 Octobre 2003)

sylver a dit:
			
		

> Merci à tous les deux, même si j'ai trouvé tout seul ^^



Gnagnagna. 
	

	
	
		
		

		
		
	


	









			
				sylver a dit:
			
		

> Sinon, je trouve aussi très malheureux que Précision Mac ait disparu, c'était selon moi la meilleure lecture mac (un peu technique, certes, mais toujours compréhensible).



J'adhère à 100 % 
	

	
	
		
		

		
		
	


	




À+


----------

