Téléchargement de plusieurs files via ftp en utilisant curl

J'essaie de download tous les files text dans le dossier actuel via FTP vers un location de server en utilisant CURL. J'ai essayé la ligne suivante:

curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY 

où XXX est l'adresse IP du server et YYY est le nom d'user: mot de passe. Je suis en mesure de transférer file1.txt au server avec succès, mais il se plaint du deuxième file disant «Impossible d'ouvrir» nom_file '!'

J'ai permuté les noms de files et cela a fonctionné pour file2.txt et non file1.txt. On dirait que j'ai mal la syntaxe, mais c'est ce que dit le manuel?

Aussi, idéalement, j'aurais aimé faire quelque chose comme ça:

  curl -T *.txt ftp://XXX --user YYY 

parce que je ne connais pas toujours les noms des files txt dans le dossier actuel ou le nombre de files à transférer. Je suis d'avis que je devrais écrire un script bash qui recueille la sortie de 'ls * .txt' dans un tableau et la met dans le format de plusieurs files requirejs par curl. Je n'ai pas encore fait de script bash – est-ce le moyen le plus simple d'y parvenir?

Votre première command line devrait fonctionner sans espaces blancs:

 curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY 

Notez également le "/" dans les URLs ci-dessus.

Voici le manuel de curl sur l'option "-T":

-T, –upload-file

Cela transfère le file local spécifié vers l'URL distante. S'il n'y a pas de partie file dans l'URL spécifiée, Curl appenda le nom du file local. NOTEZ que vous devez utiliser un dernier / dernier directory pour prouver réellement à Curl qu'il n'y a pas de nom de file ou que curl pensera que votre dernier nom de directory est le nom de file distant à utiliser. Cela entraînera probablement l'échec de l'opération de téléchargement. Si cela est utilisé sur un server HTTP (S), la command PUT sera utilisée.

Utilisez le nom de file "-" (un seul tiret) pour utiliser stdin au lieu d'un file donné. Alternativement, le nom de file "." (une seule période) peut être spécifié à la place de "-" pour utiliser stdin en mode non bloquant afin de permettre la lecture de la sortie du server pendant le téléchargement de stdin.

Vous pouvez spécifier un -T pour chaque URL sur la command line. Chaque paire d'URL -T + spécifie quoi envoyer et où. curl prend également en charge le "Globulation" de l'argument -T, ce qui signifie que vous pouvez download plusieurs files sur une seule URL en utilisant le même style de globulation d'URL pris en charge dans l'URL, comme ceci:

 curl -T "{file1,file2}" http://www.uploadtothissite.com 

ou même

 curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/ 

L'extension "* .txt" ne fonctionne pas car curl ne supporte que la même syntaxe que pour les URL:

Vous pouvez spécifier plusieurs URL ou parties d'URL en écrivant des sets de pièces entre accolades, comme dans:

http: // site . {un, deux, trois} .com

ou vous pouvez get des séquences de séries alphanumériques en utilisant [] comme dans:

ftp://ftp.numericals.com/file%5B1-100%5D.txt

ftp://ftp.numericals.com/file%5B001-100%5D.txt (avec des zéros à gauche)

ftp://ftp.letters.com/file%5Baz%5D.txt

[…]

Lorsque vous utilisez les séquences [] ou {} lorsque vous les appelez à partir d'une invite de command line, vous devez probablement placer l'URL complète entre guillemets pour éviter que le shell n'interfère avec elle. Cela vaut également pour les autres personnages traités spéciaux, comme par exemple '&', '?' et '*'.

Mais vous pourriez utiliser le "shell" normal comme ceci:

 curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY 

(Le dernier exemple peut ne pas fonctionner dans tous les shells ou avec n'importe quel type de noms de file exotiques.)