我正在开发一个网站,并且我拥有 FTP 访问权限,可以通过 FTP 将本地文件上传到网站上的目录。我想使用命令行尽可能自动化此部署过程。
有没有视窗命令行实用程序,我可以使用它来帮助我进一步自动化通过 FTP 将本地目录与远程目录同步的过程?
答案1
使用 WinSCP 自动同步 FTP 文件夹
我已经成功地完成了这样的任务,使用非常酷的温SCP产品。我为您提供了一个样品批处理脚本以及帮助设置这样的自动化任务,从而为您提供一个相当完整的答案,以帮助满足您的需求。
本质上你将:
- 在温SCP图形用户界面
- 保存定义的 FTP 连接并为其指定一个名称,以表明其所属的内容
使用脚本中的 FTP 连接名称打开 FTP 命令的连接 - 请参阅批处理脚本部分
批处理脚本
在下面的批处理脚本中,您需要确保这些变量设置了正确的值:localdir
,,,,因此请确保这些变量设置为指向正确的文件夹、WinSCP 定义的 FTP 连接和日志文件 - 其余的应该按原样工作。remotedir
winscplogin
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 连接不要记住上次使用的目录因为脚本将明确地进入该文件夹。
您可以通过在 WinSCP GUI 中突出显示定义的 FTP 连接名称来完成此操作,然后选择编辑|先进的| 目录| 取消选中记住上次使用的目录|好的|节省。
同步
句法
synchronize local|remote|both [ <local directory> [ <remote directory> ] ]
评论
当第一个参数为 时
local
,远程目录的更改将应用于本地目录。当第一个参数为 时remote
,本地目录的更改将应用于远程目录。当第一个参数为 时both
,本地和远程目录均可修改。当未指定目录时,当前工作目录将被同步。
笔记:对于该命令,覆盖确认始终处于关闭状态。
开关:
更多资源
答案2
答案3
一个简单的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
"