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

Существует ли утилита командной строки Windows, которую я могу использовать, чтобы помочь мне еще больше автоматизировать процесс синхронизации локального каталога с удаленным каталогом через FTP с этой задачей?

3 ответа3

2

Автоматизация синхронизации папок FTP с WinSCP

Я успешно выполнил такие задачи, используя потрясающий и очень классный продукт WinSCP . Я также предоставил вам образец Batch Script, чтобы помочь настроить такую задачу для автоматизации и, таким образом, дать вам довольно полный и полный ответ, чтобы помочь удовлетворить ваши потребности.

По сути вы будете:

  1. Определите FTP-соединение в графическом интерфейсе WinSCP
  2. Сохраните определенное FTP-соединение и дайте ему имя, которое указывает, к чему оно относится
  3. Используйте имя соединения FTP в скрипте, чтобы открыть соединение для команд FTP - см. Раздел « Пакетный скрипт »




Пакетный скрипт

В приведенном ниже пакетном скрипте вы захотите убедиться, что эти переменные установлены с правильными значениями: localdir , remotedir , winscplogin и logfile , поэтому убедитесь, что они установлены для указания правильных папок, определенного FTP-соединения WinSCP и logfile журнала - остальное должно просто работать как есть.

@ECHO ON

:SetFileLogVariables
SET localdir=C:\dev\site123
SET remotedir="dev\site123"
SET logfile=C:\logs\FTP_dev_site123_sync.log

:SetPrgVariables
SET prgwinscp="C:\Program Files\WinSCP3\WinSCP.com"
SET winscplogin="DevSiteSync"
SET winscpfile=%temp%\~tmpWinSCPFTPSyncT_%~N0.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"

:SetWinSCPSyncCommand
SET ftpcmd=synchronize remote "%localdir%\"

:ftpout
ECHO.                                                                   >> %logfile%
ECHO ***************************  FTP OUT  ***************************  >> %logfile%
ECHO Synchronizing files to %winscplogin% server  on %date% at %time%   >> %logfile%

ECHO option batch on          >> %winscpfile%
ECHO option confirm off       >> %winscpfile%
ECHO option transfer binary   >> %winscpfile%
ECHO open %winscplogin%       >> %winscpfile%
ECHO cd %remotedir%           >> %winscpfile%
ECHO %ftpcmd%                 >> %winscpfile%
ECHO close                    >> %winscpfile%
ECHO exit                     >> %winscpfile%

ECHO %winscpfile%                                >> %logfile%
TYPE %winscpfile%                                >> %logfile%
ECHO ------------------------------------------- >> %logfile%
%prgwinscp% /script=%winscpfile%                 >> %logfile%
ECHO ------------------------------------------- >> %logfile%
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO Transmission complete on %date% at %time%   >> %logfile%
EXIT

Примечание к конфигурации соединения WinSCP

Вы, вероятно, захотите сообщить определенному WinSCP FTP-соединению НЕ запоминать последний использованный каталог, так как скрипт явно перейдет в папку.

Вы завершаете это, выделяя определенное имя FTP-соединения в WinSCP GUI и затем выбираете Edit | Расширенный | Справочники | снимите флажок Запомнить последний использованный каталог | Хорошо | Сохранить


синхронизировать

Синтаксис

synchronize local|remote|both [ <local directory> [ <remote directory> ] ]

замечания

Когда первый параметр является local , изменения из удаленного каталога применяются к локальному каталогу. Когда первый параметр является remote , изменения из локального каталога применяются к удаленному каталогу. Когда первым параметром является both локальный, так и удаленный каталоги, можно изменить.

Если каталоги не указаны, текущие рабочие каталоги синхронизируются.

Примечание. Подтверждение перезаписи для команды всегда отключено.

Переключатели:

источник


Дополнительные ресурсы

1

Я успешно использовал почтенный и бесплатный клиент NcFTP.

Пример использования:

ncftpput -u user -p password ftp.server.com /server-folder file-path
0

Простой bash скрипт ftp может передать файл:

#!/bin/sh
HOST='hostname'
USER='username'
PASSWD='password'
FILE='test.txt'

ftp $HOST <<END_SCRIPT
USER $USER
PASS $PASSWD
passive
ls
cd test
put $FILE
quit
END_SCRIPT
exit 0

Проще, чем писать собственный скрипт для циклического перебора файлов и папок, используйте lsftp:

#!/bin/bash
HOST='hostname'
USER='username'
PASS='password'
TARGETFOLDER='/test'
SOURCEFOLDER='/mnt/c/test'

lftp -f "
set ssl:verify-certificate no
open $HOST
user $USER $PASS
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"

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