通过命令行自动同步 FTP 文件夹以便上传

通过命令行自动同步 FTP 文件夹以便上传

我正在开发一个网站,并且我拥有 FTP 访问权限,可以通过 FTP 将本地文件上传到网站上的目录。我想使用命令行尽可能自动化此部署过程。

有没有视窗命令行实用程序,我可以使用它来帮助我进一步自动化通过 FTP 将本地目录与远程目录同步的过程?

答案1

使用 WinSCP 自动同步 FTP 文件夹

我已经成功地完成了这样的任务,使用非常酷的温SCP产品。我为您提供了一个样品批处理脚本以及帮助设置这样的自动化任务,从而为您提供一个相当完整的答案,以帮助满足您的需求。

本质上你将:

  1. 温SCP图形用户界面
  2. 保存定义的 FTP 连接并为其指定一个名称,以表明其所属的内容
  3. 使用脚本中的 FTP 连接名称打开 FTP 命令的连接 - 请参阅批处理脚本部分

    在此处输入图片描述
    在此处输入图片描述
    在此处输入图片描述


批处理脚本

在下面的批处理脚本中,您需要确保这些变量设置了正确的值:localdir,,,,因此请确保这些变量设置为指向正确的文件夹、WinSCP 定义的 FTP 连接和日志文件 - 其余的应该按原样工作。remotedirwinscploginlogfile

@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

我成功地使用了古老而自由的 NcFTP 客户端

使用示例:

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

答案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
"

相关内容