Votre première commande devrait fonctionner sans espaces blancs:
curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY
Notez également le "/" de fin dans les URL ci-dessus.
Ceci est l'entrée manuelle de curl sur l'option "-T":
-T, --fichier-upload
Cela transfère le fichier local spécifié vers l'URL distante. S'il n'y a aucune partie de fichier dans l'URL spécifiée, Curl ajoutera le nom du fichier local. REMARQUE: vous devez utiliser un signe de fin / sur le dernier répertoire pour vraiment prouver à Curl qu'il n'y a pas de nom de fichier ou curl pensera que votre dernier nom de répertoire est le nom de fichier distant à utiliser. Cela entraînera très probablement l'échec de l'opération de téléchargement. Si cela est utilisé sur un serveur HTTP (S), la commande PUT sera utilisée.
Utilisez le nom de fichier "-" (un seul tiret) pour utiliser stdin au lieu d'un fichier donné. Alternativement, le nom de fichier "." (une seule période) peut être spécifié au lieu de "-" pour utiliser stdin en mode non bloquant pour permettre la lecture de la sortie du serveur pendant le téléchargement de stdin.
Vous pouvez spécifier un -T pour chaque URL sur la ligne de commande. Chaque paire d'URL -T + spécifie quoi télécharger et où. curl prend également en charge le "globbing" de l'argument -T, ce qui signifie que vous pouvez télécharger plusieurs fichiers vers une seule URL en utilisant le même style de globbing 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'expansion "* .txt" ne fonctionne pas car curl ne prend en charge que la même syntaxe que pour les URL:
Vous pouvez spécifier plusieurs URL ou parties d'URL en écrivant des jeux de parties entre accolades comme dans:
http: // site . {un, deux, trois} .com
ou vous pouvez obtenir des séquences de séries alphanumériques en utilisant [] comme dans:
ftp://ftp.numericals.com/file[1-100[.txt
ftp://ftp.numericals.com/file[001-100].txt (avec zéros)
ftp://ftp.letters.com/file}azaz.txt
[...]
Lorsque vous utilisez des séquences [] ou {} lorsqu'elles sont appelées à partir d'une invite de ligne de commande, vous devez probablement mettre l'URL complète entre guillemets doubles pour éviter que le shell n'interfère avec. Cela vaut également pour d'autres personnages traités comme spéciaux, comme par exemple '&', '?' et '*'.
Mais vous pouvez utiliser le globbing "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 tout type de nom de fichier exotique.)
$(perl -e 'print join(",",@ARGV)' *.txt)
gérera correctement les noms de fichiers avec des espaces.