Как написать функцию «compose» для конвейеров bash с именованными каналами

Ваша первая команда должна работать без пробелов:

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

Также обратите внимание на корявый "/" в URL-адресах выше.

Вот запись в руководстве curl об опции "-T":

-T, --upload-file

Это передает указанный локальный файл на удаленный URL. Если в указанном URL нет части файла, Curl добавит имя локального файла. Обратите внимание, что вы должны использовать символ / в последнем каталоге, чтобы доказать Curl, что имя файла отсутствует, иначе curl решит, что имя вашего последнего каталога является именем удаленного файла. Это, скорее всего, приведет к неудаче операции загрузки. Если это используется на сервере HTTP(S), то будет использоваться команда PUT.

Используйте имя файла "-" (одиночное тире), чтобы использовать stdin вместо заданного файла. В качестве альтернативы вместо "-" можно указать имя файла "." (одинарная точка). "-" для использования stdin в неблокирующем режиме, что позволяет читать вывод сервера во время загрузки stdin.

Вы можете указать один -T для каждого URL в командной строке. Каждая пара -T + URL указывает, что и куда загружать. curl также поддерживает "globbing" аргумента -T. что означает, что вы можете загрузить несколько файлов на один URL, используя тот же стиль URL globbing, который поддерживается в URL, например, так:

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

или даже

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

"*.txt" расширение не работает, потому что curl поддерживает только тот же синтаксис, что и для URL:

Вы можете указать несколько URL или частей URL, записывая наборы частей в скобках, как в:

http://site.{one,two,three}. com

или вы можете получить последовательности буквенно-цифровых серий, используя [], как в:

ftp://ftp.numericals.com/file[1-100].txt

ftp://ftp.numericals.com/file[001-100].txt (с ведущими нулями)

ftp://ftp.letters.com/file[a-z].txt

[...]

При использовании последовательностей [] или {} при вызове из командной строки, вам, вероятно, придется заключить полный URL в двойные кавычки, чтобы избежать вмешательства оболочки. Это касается и других специальных символов, таких как, например, '&', '?' и '*'.

Но вы можете использовать "нормальный" shell globbing следующим образом:

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

(Последний пример может работать не во всех оболочках или с экзотическими именами файлов)

.

3
21.01.2016, 18:48
0 ответов

Теги

Похожие вопросы