Terminal | Problème avec 'curl'

sylver

Membre confirmé
23 Septembre 2003
343
39
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

Vétéran
Club MacG
17 Octobre 2001
7 086
730
Strasbourg
Bienvenue sylver.
zen.gif


Bloc de code:
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

Membre confirmé
23 Septembre 2003
343
39
Hello

Merci pour l'accueil
smile.gif


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 :

Bloc de code:
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 ?
 

sylver

Membre confirmé
23 Septembre 2003
343
39
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

Membre confirmé
23 Septembre 2003
343
39
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

Vétéran
Club MacG
17 Octobre 2001
7 086
730
Strasbourg
sylver a dit:
J'ai trouvé !

Tant mieux.
smile.gif


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

Membre émérite
30 Juin 2002
798
46
Strasbourg
sylver a dit:
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 !
Espérons que ce post puisse un jour servir à quelqu'un.

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
frown.gif
.
 

sylver

Membre confirmé
23 Septembre 2003
343
39
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).
frown.gif