Seu primeiro comando deve funcionar sem espaços em branco:
curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY
Observe também o "/" à direita nos URLs acima.
Esta é a entrada manual do curl sobre a opção "-T":
-T, --upload-file
Isso transfere o arquivo local especificado para o URL remoto. Se não houver parte do arquivo no URL especificado, o Curl acrescentará o nome do arquivo local. OBSERVE que você deve usar um / no último diretório para realmente provar a Ondulação que não há nome de arquivo ou a ondulação pensará que seu último nome de diretório é o nome de arquivo remoto a ser usado. Isso provavelmente fará com que a operação de upload falhe. Se isso for usado em um servidor HTTP (S), o comando PUT será usado.
Use o nome do arquivo "-" (um único traço) para usar stdin em vez de um determinado arquivo. Como alternativa, o nome do arquivo "." (um único período) pode ser especificado em vez de "-" para usar o stdin no modo sem bloqueio para permitir a leitura da saída do servidor enquanto o stdin está sendo carregado.
Você pode especificar um -T para cada URL na linha de comando. Cada par -T + URL especifica o que enviar e para onde. O curl também suporta "globbing" do argumento -T, o que significa que você pode fazer upload de vários arquivos em um único URL usando o mesmo estilo de globbing de URL suportado no URL, assim:
curl -T "{file1,file2}" http://www.uploadtothissite.com
ou mesmo
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
A expansão "* .txt" não funciona porque o curl suporta apenas a mesma sintaxe dos URLs:
Você pode especificar vários URLs ou partes de URLs escrevendo conjuntos de peças dentro de chaves, como em:
http: // site . {um, dois, três} .com
ou você pode obter seqüências de séries alfanuméricas usando [] como em:
ftp://ftp.numericals.com/file[1-100unette.txt
ftp://ftp.numericals.com/file[001-100unette.txt (com zeros à esquerda)
ftp://ftp.letters.com/file[azorgeous.txt
[...]
Ao usar seqüências [] ou {} quando invocadas em um prompt de linha de comando, você provavelmente precisará colocar a URL completa entre aspas duplas para evitar que o shell interfira nela. Isso também vale para outros caracteres tratados como especiais, como por exemplo '&', '?' e '*'.
Mas você pode usar o shell "normal" globbing assim:
curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY
(O último exemplo pode não funcionar em todas as conchas ou com qualquer tipo de nome de arquivo exótico.)
$(perl -e 'print join(",",@ARGV)' *.txt)
manipulará corretamente os nomes de arquivos com espaços.