Su primer comando debería funcionar sin espacios en blanco:
curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY
También tenga en cuenta el "/" final en las URL anteriores.
Esta es la entrada manual de curl sobre la opción "-T":
-T, --upload-file
Esto transfiere el archivo local especificado a la URL remota. Si no hay parte del archivo en la URL especificada, Curl agregará el nombre del archivo local. TENGA EN CUENTA que debe usar un seguimiento / en el último directorio para demostrar realmente a Curl que no hay un nombre de archivo o curl pensará que su último nombre de directorio es el nombre de archivo remoto a usar. Lo más probable es que la operación de carga falle. Si esto se usa en un servidor HTTP (S), se usará el comando PUT.
Use el nombre de archivo "-" (un solo guión) para usar stdin en lugar de un archivo dado. Alternativamente, el nombre del archivo "." (un solo período) puede especificarse en lugar de "-" para usar stdin en modo sin bloqueo para permitir leer la salida del servidor mientras se está cargando stdin.
Puede especificar una -T para cada URL en la línea de comando. Cada par de URL -T + especifica qué cargar y dónde. curl también es compatible con el "globbing" del argumento -T, lo que significa que puede cargar varios archivos en una sola URL utilizando el mismo estilo de globbing de URL admitido en la URL, de esta manera:
curl -T "{file1,file2}" http://www.uploadtothissite.com
o incluso
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
La expansión "* .txt" no funciona porque curl solo admite la misma sintaxis que para las URL:
Puede especificar varias URL o partes de URL escribiendo conjuntos de partes entre llaves como en:
http: // sitio . {uno, dos, tres} .com
o puede obtener secuencias de series alfanuméricas usando [] como en:
ftp://ftp.numericals.com/file[1-100font>.txt
ftp://ftp.numericals.com/file[001-100font>.txt (con ceros a la izquierda)
ftp://ftp.letters.com/file[azfont>.txt
[...]
Al usar secuencias [] o {} cuando se invoca desde una línea de comando, probablemente tenga que poner la URL completa entre comillas dobles para evitar que el shell interfiera con ella. Esto también se aplica a otros caracteres tratados como especiales, como por ejemplo '&', '?' y '*'.
Pero podría usar el globo "normal" como este:
curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY
(El último ejemplo puede no funcionar en todos los shells o con cualquier tipo de nombre de archivo exótico).
$(perl -e 'print join(",",@ARGV)' *.txt)
manejará correctamente los nombres de archivo con espacios.