Il tuo primo comando dovrebbe funzionare senza spazi bianchi:
curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY
Nota anche il "/" finale negli URL sopra.
Questa è la voce manuale del ricciolo sull'opzione "-T":
-T, --upload-file
Ciò trasferisce il file locale specificato nell'URL remoto. Se l'URL specificato non contiene parti di file, Curl aggiungerà il nome del file locale. NOTA che devi usare un finale / sull'ultima directory per dimostrare davvero a Curl che non esiste un nome file o che curl penserà che il tuo ultimo nome directory sia il nome del file remoto da usare. Ciò molto probabilmente causerà il fallimento dell'operazione di caricamento. Se utilizzato su un server HTTP (S), verrà utilizzato il comando PUT.
Usa il nome del file "-" (un singolo trattino) per usare lo stdin invece di un determinato file. In alternativa, il nome del file "." (un solo periodo) può essere specificato invece di "-" per utilizzare stdin in modalità non bloccante per consentire la lettura dell'output del server durante il caricamento di stdin.
È possibile specificare uno -T per ciascun URL sulla riga di comando. Ogni coppia -T + URL specifica cosa caricare e dove. curl supporta anche il "globbing" dell'argomento -T, il che significa che è possibile caricare più file su un singolo URL utilizzando lo stesso stile globbing dell'URL supportato nell'URL, in questo modo:
curl -T "{file1,file2}" http://www.uploadtothissite.com
o anche
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
L'espansione "* .txt" non funziona perché l'arricciatura supporta solo la stessa sintassi degli URL:
È possibile specificare più URL o parti di URL scrivendo set di parti tra parentesi graffe come in:
http: // site . {uno, due, tre} .com
oppure puoi ottenere sequenze di serie alfanumeriche usando [] come in:
ftp://ftp.numericals.com/file[1-100].txt
ftp://ftp.numericals.com/file[001-100[.txt (con zeri iniziali)
ftp://ftp.letters.com/file[az].txt
[...]
Quando si usano sequenze [] o {} quando vengono invocate da un prompt della riga di comando, probabilmente è necessario inserire l'URL completo tra virgolette doppie per evitare che la shell interferisca con esso. Questo vale anche per altri personaggi trattati in modo speciale, come ad esempio "&", "?" e '*'.
Ma potresti usare il "normale" gorgoglio della shell in questo modo:
curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY
(L'ultimo esempio potrebbe non funzionare in tutte le shell o con qualsiasi tipo di nome di file esotico.)
$(perl -e 'print join(",",@ARGV)' *.txt)
gestirà correttamente i nomi dei file con spazi.