Как загрузить файлы с FTP-сайта в одной командной строке без взаимодействия с пользователем (Windows)


13

Я знаю, что есть команда FTP, которую можно запустить из командной строки в Windows, и она загружает файл с FTP-сайта. Пользователь + пароль указываются в «той» однострочной cmd. Эти опции + пароль должны быть в этой командной строке.

echo open 192.168.1.64 21> ftp.txt
echo anonymous>> ftp.txt
echo ftp@ftp.com>> ftp.txt
echo bin >> ftp.txt
echo get test.txt >> ftp.txt
echo bye >> ftp.txt

ftp -s:ftp.txt

Вам нужно скачать через FTP или вам просто нужно скачать этот файл с любой программой? (Rsync может читать из файла с именами для синхронизации и из командной строки. Scp также может делать это из командной строки. Оба не такие древние, как обычный текст, no_true_security FTP).
Хеннес

Ответы:


13

Попробуйте это: Пакетные файлы - Автоматическая загрузка по FTP

WGET ftp://ftp.mydomain.com/path/file.ext  

для анонимных загрузок

или:

WGET ftp://user:password@ftp.mydomain.com/path/file.ext  

когда требуется аутентификация.


Как указал @XavierStuvw с помощью правок и комментариев, переключение WGETна строчные буквы wgetбудет работать в Linux.

wget ftp://user:password@ftp.mydomain.com/path/file.ext

я не вижу ни одной команды, которая имеет опцию смены пользователя и пароля в ОДНОЙ строке.
Soundhax

-s переключатель был в предложении, как я помню
Soundhax

2
Добро пожаловать в Супер пользователя! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
канадец Люк

1
@ CalvT Нет возражений. Предполагаемое преимущество комментария состоит в том, что пользователи Linux могут попасть на эту страницу после поиска в Интернете и наблюдать за системой, к которой он относится. На самом деле это случилось со мной.
XavierStuvw

1
@CalvT Название действительно точное, но поисковые системы часто визуализируют весь фрейм ответа, и в него легко попасть. Конечно, это не должно сбрасывать со счетов читателя от внимательности, но в этом случае было случайно, что инструкции для Linux и Windows в основном одинаковы. Отлично, спасибо.
XavierStuvw

8

Я нашел способ:

echo open 192.168.0.1 >> ftp &echo user admin w00t >> ftp &echo binary >> ftp &echo get file.zip >> ftp &echo bye >> ftp &ftp -n -v -s:ftp &del ftp

Это не сработало, когда я попробовал (в итоге я использовал клиент командной строки WinSCP ). На какой версии Windows она тестировалась?
Питер Мортенсен

Не могли бы вы объяснить, как работает эта линия? Не могу найти никакой документации. Я пытаюсь заставить его работать с PSFTP
stallingOne

@stallOne Думайте о &как о разрывателе строки ... это на самом деле несколько команд. По сути, он строит скрипт, построчно, используя echo, а затем приказывает ftpего запустить. Он также называет файл сценария ftp, что делает его непонятным.
Хавенард

Плохой выбор имени файла. «ftp» - это имя файла скрипта, который он создает, и имя исполняемого файла. Таким образом, разрешение пути ftp -n -v -s:ftpнемного странно. (Каждое использование «ftp» относится к разным вещам)
Чед Шуггинс

2

Обратите внимание, что вы можете запросить синтаксис команды в DOS, используя /? переключатель. Например:

C: \> ftp /?

Передача файлов на компьютер и с компьютера, на котором работает служба FTP-сервера
(иногда называют демоном). Ftp можно использовать в интерактивном режиме.

FTP [-v] [-d] [-i] [-n] [-g] [-s: имя файла] [-a] [-A] [-x: sendbuffer] [-r: recvbuf
fer] [-b: asyncbuffers] [-w: windowsize] [хост]

  -v Подавляет отображение ответов удаленного сервера.
  -n Подавляет автоматический вход при первоначальном подключении.
  -i Отключает интерактивные запросы во время нескольких файлов
                  переводы.
  -d Включает отладку.
  -g Отключает глобализацию имени файла (см. команду GLOB).
  -s: имя файла Указывает текстовый файл, содержащий команды FTP; 
                  Команды будут автоматически запускаться после запуска FTP.
  -a Использовать любой локальный интерфейс при привязке передачи данных.
  -А логин как анонимный.
  -x: send sockbuf Переопределяет стандартный размер SO_SNDBUF, равный 8192.
  -r: recv sockbuf Переопределяет размер SO_RCVBUF по умолчанию, равный 8192.
  -b: счетчик асинхронности Переопределяет счетчик асинхронности по умолчанию, равный 3
  -w: windowsize Переопределяет размер буфера передачи по умолчанию 65535.
  host Определяет имя хоста или IP-адрес удаленного
                  хост для подключения.

Ноты:
  - Команды mget и mput принимают y / n / q для да / нет / выход.
  - Используйте Control-C для отмены команд.

В вашем случае вы захотите использовать ключ -s, чтобы передать ему скрипт, включая ответы при входе.

Например:

  1. Создайте файл сценария (c: \ scriptfile.txt) со следующим содержимым:

    open
    servername_or_ip
    username
    password
    get
    /fullpath/thefile.txt
    c:\fullpath\thefile.txt
    quit
    
  2. выполнить ftp с ключом -s и указать имя файла скрипта

    C:\>ftp -s:c:\scriptfile.txt
    

В Windows XP (да, да, я знаю) это приводит к «Неизвестному хосту /?».
Питер Мортенсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.