Intereting Posts
Понимание rc.local и устранения неполадок Комментировать все строки из последней прокомментированной строки в строке с 'foo' Подходит ли Linux к соглашениям System V по умолчанию, заканчивающимся на SIGIO? scp не может загружать / скачивать файлы, даже если ssh работает Как скопировать / tar-файлы из папки с огромным количеством файлов? Извлечь аудио из видео в Linux с помощью графического интерфейса? Заменить скомпилированные символы юникода Kali 2.0 не загрузится после двойной загрузки с Windows 10? Сканирование ~ / Скачивание при создании нового файла Плохое выполнение Java-приложения и плохого сервера Игнорировать определенные символы при сравнении переменных? Получение электронной почты с сервера POP3 для нескольких адресов и хранения для локальных пользователей Передача изображения докеров на несколько серверов без докерной машины Как удалить первый символ в определенном столбце, используя sed Клон Virtualbox vboxmanage не отображается в списке виртуальных машин

Загрузка нескольких файлов через ftp с помощью curl

Я пытаюсь загрузить все текстовые файлы в текущей папке через FTP на место сервера, используя CURL. Я пробовал следующую строку:

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

где XXX – IP-адрес сервера, а YYY – имя пользователя: пароль. Я могу успешно передать файл file1.txt на сервер, но он жалуется на второй файл, говорящий «Не могу открыть» имя_файла '!'

Я поменял имена файлов, и он работал для file2.txt, а не file1.txt. Похоже, что у меня синтаксис неправильный, но это то, что говорится в руководстве?

Кроме того, в идеале я хотел бы сделать что-то вроде этого:

  curl -T *.txt ftp://XXX --user YYY 

потому что я не всегда знал имена файлов txt в текущей папке или количество передаваемых файлов. Я считаю, что мне, возможно, придется написать сценарий bash, который собирает вывод 'ls * .txt' в массив и помещает его в формат нескольких файлов, необходимый для завивки. Я раньше не делал bash-скриптов – это самый простой способ достичь этого?

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

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

Также обратите внимание на конечный «/» в указанных выше URL-адресах.

Это рулонная инструкция по опции «-T»:

-T, –upload-file

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

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

Вы можете указать один -T для каждого URL-адреса в командной строке. Каждая пара -T + URL указывает, что нужно загружать и где. curl также поддерживает «globbing» аргумента -T, что означает, что вы можете загружать несколько файлов в один URL-адрес, используя тот же стиль URL-адреса URL, который поддерживается в 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: // сайт . {один, два, три} .com

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

ftp://ftp.numericals.com/file%5B1-100%5D.txt

ftp://ftp.numericals.com/file%5B001-100%5D.txt (с ведущими нулями)

ftp://ftp.letters.com/file%5Baz%5D.txt

[…]

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

Но вы можете использовать «нормальную» оболочку, такую ​​как:

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

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