У меня проблемы с получением всех файлов с FTP-сервера. Обычно я получаю все файлы, используя командную строку / терминал со следующим синтаксисом: get a.txt
(очень, очень много времени тратится на аутентификацию входа в систему)
Итак, я ожидаю, что я хочу получить все файлы с FTP-сервера с помощью сценария (пакета), поэтому я не трачу свое время на использование терминала / командной строки. Я просто хочу запустить сценарий. Конечно, в скрипт необходимо включить аутентификацию при входе. Как бы я это сделал?
Для такого рода вещей я использую wget:
wget -m ftp://user:password@ftp.example.com
Или команда lftp 'mirror':
lftp -c mirror ftp://user:password@ftp.example.com/
Избавьте себя от множества проблем, пытаясь написать это с помощью FTP-клиента. Скачать ncftp, и используйте это.
В принципе:
ncftpget -R ftp://user:password@host/path/to your files
-R означает, что он выполняет рекурсивную передачу
Во-первых, я бы порекомендовал вам использовать SCP через FTP. FTP небезопасен и передает учетные данные и файлы в открытом виде. SCP, по сути, sc
переезжать ssh
и довольно безопасен, особенно если вы используете пары ключей для аутентификации.
Другой вариант - использовать SFTP. Несмотря на название, это не FTP через SSL или SSH-соединение. Это совершенно новый протокол. Однако, как и в случае с приведенной выше рекомендацией, это не точный ответ на ваш вопрос, а, скорее, небольшая мыльница по поводу небезопасности FTP.
Выберите свой ftp-клиент и изучите, как он обрабатывает сценарии. Вы не упомянули, какую ОС вы используете или какой клиент в своей ОС вы используете. Вам нужно будет предоставить эту информацию, прежде чем мы сможем принести вам больше пользы.
Какую ОС и FTP-клиент вы используете?
РЕДАКТИРОВАТЬ: Я установил, что «пакетный файл» соответствует среде Windows. В этом случае попробуйте следующее:
ftp.exe -s:filename
В -s
передает команде ftp файл, содержащий команды FTP. В файле, который читает ftp.exe, создайте команды для входа в систему и получения файлов.
open ftp.server.name
user
[username]
[password]
get *.txt
quit
Дополнительные сведения о FTP и пакетных файлах см. На странице эта статья Microsoft KB.
Если вы используете Linux, у вас есть множество ftp-клиентов, доступных в выбранной вами оболочке. При подключении к FTP-серверу у вас будет возможность указать имя пользователя и пароль с помощью различных переключателей, которые назначает сам клиент. Стандартный синтаксис имени пользователя и пароля в URL-адресе FTP: ftp://user:password@host.tld/
Оттуда новая строка в вашем скрипте с использованием get
Команда с подстановочными знаками загрузит все нужные вам файлы. Например get *.txt
Однако имейте в виду, что точный синтаксис для get
Создание файлов и каталогов зеркалирования будет зависеть от вашего FTP-клиента. Я предпочитаю ncftp
который имеет другие параметры зеркалирования, чем другие FTP-клиенты.
В качестве бонуса рекомендую первый сохранение файлов, которые вы хотите сократить, в размере передаваемых файлов, а также сохранение разрешений UNIX. FTP удаляет исходные разрешения из файлов, что может сильно раздражать при восстановлении веб-сайта или приложения.
Однако обычно это невозможно сделать с помощью FTP-клиента, если сам FTP-сервер не поддерживает расширенные команды. Например, FTP-сервер ncftpd
предлагает некоторые расширенные команды, которых нет на других FTP-серверах. Итак, теперь я прошел полный круг, чтобы предложить вам настроить туннель SSH, чтобы вы могли сначала использовать tar для каталога. С установленным демоном SSH вы можете затем подключить SCP к серверу и получить файл TAR, а не использовать FTP.
Если вы должны сохранить FTP в уравнении, вы можете создать задание cron на сервере, которое обрабатывает нужные файлы, помещает их в каталог FTP, а затем создает сценарий FTP, который подключается к серверу и извлекает файл tar.
Автоматизация - ваш друг. Вы на правильном пути, просто начните больше думать о безопасности и оптимизации.