Я использую сценарий FTP, который работает под управлением Cygwin и Windows cmd и использует параметр командной строки ftp -s для чтения и выполнения команд из командного файла:

ftp -i -s:/path/ftp.params 

Пакетный файл ftp.param генерируется другим заданием и содержит стандартные команды FTP, такие как:

OPEN my_address
my_login
my_password
GET file_a
GET file_b
BYE

Теперь я должен использовать этот сценарий ftp под Solaris, но, согласно его man-странице по ftp, версия ftp Solaris не принимает ключи командной строки -s для запуска командного файла.

Я искал в этом документе, а также в Интернете, но я не нашел пути. Есть ли у вас предложения?

2 ответа2

2

Эта опция, кажется, доступна только для клиента Windows ftp. Для получения аналогичного результата вы можете установить FTP-клиент, который вы можете создать сценарий. NcFTP довольно дружелюбен к этому. Wget тоже будет работать.

С ncftp у вас будет файл со списком "get" и файл с вашими учетными данными, если вы не хотите вводить их каждый раз. (Знать о рисках безопасности)

Из командной строки, используя bash, вы должны либо ввести в скрипт следующее, либо просто запустить:

while read line
do
    ncftpget -f <FILEWITHCREDENTIALS> $line -bb
done < <FILEWITHLIST>
ncftpbatch -d

Ваш файл учетных данных будет в виде

host <my_address>
user <my_login>
pass <my_password>

-bb отправляет каждый файл как пакетное задание, ожидающее запуска. Вызов ncftpbatch запустит задание. Это должно ограничить одно соединение.

Другими параметрами могут быть -b (просто немедленно запустить задание в фоновом режиме), сброс вызова ncftpbatch и использование в команде параметров user/host/password вместо -f.

Вы можете найти ncftp здесь и здесь, если он еще не установлен.

Для wget вы можете использовать аналогичный скрипт цикла и заменить вызов ncftpget на

wget ftp://user:password@ftp.mydomain.com/path/$line

Опять же, если он еще не установлен, вы можете получить wget здесь, либо с помощью любой программы найдите соответствующий менеджер пакетов для вашей версии Solaris.

Вы можете найти больше информации о программах на страницах руководства или с помощью быстрого веб-поиска.

1

Хорошо, я нашел решение, которое работает.

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

Единственный реальный недостаток заключается в том, что для этого требуется немного изменить пакетный файл, поэтому задание, которое его генерирует.

  • Часть оболочки состоит в выполнении команды ftp следующим образом:

    ftp -i -n my_address < /path/ftp.params
    
  • И командный файл должен быть изменен таким образом:

    USER my_login my_password 
    GET file_a
    GET file_b
    BYE
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .