目前,我正在使用 filezilla 将网站的新版本部署到实时服务器。问题是,对于实时网站,有一两个配置、引导程序等文件是不同的,我必须小心不要覆盖。此外,还有大片代码永远不会改变(例如,我使用 zend 框架,它始终是相同的)。
我希望能够录制一个宏,以便每次上传同一组文件和文件夹,但不包括不应被覆盖的子目录和文件。
有任何 ftp 客户端提供此功能吗?
答案1
FTP服务器支持宏。但我宁愿使用真正的脚本语言,然后只传输需要传输的内容。我更喜欢 ssh/sftp 而不是 ftp。
答案2
我已经设置了 expect 脚本来执行此操作。如果您在 Windows 上安装客户端,则需要安装带有 expect 的 cygwin。在 Linux 上,您只需要确保安装了 expect 解释器。这是一个示例脚本,我用它来使用 scp 将文件从 Windows 机器传输到 Linux 服务器。它捕获密码,然后使用它多次调用 scp 来处理单个文件。您可以使用 sftp 和通配符发送多个文件,甚至可以使用 ftp,但我不喜欢 ftp。Ftp 以明文形式发送密码。
#!/usr/bin/expect --
# Prompt for the password and store it in $PASS
send_user "\n"
send_user "Password? "
stty -echo
expect_user -re "(.*)\n" {set PASS $expect_out(1,string)}
send_user "\n"
stty echo
# Set user name and parameters
# You can remove the above password entry and just set it here.
set user "username"
set server "server.com"
# set PASS "superSecret"
set timeout 30
set destDir "/home/user/www/htdocs/updates/"
set scp "/usr/bin/scp"
set file "/cygdrive/c/Workspace/Release/index.html"
puts "\rSending $file to $server\r"
spawn -noecho $scp $file $user@$server:$destDir
match_max 100000
expect "*?assword:*"
send -- "$PASS\r"
send -- "\r"
expect eof
set file "/cygdrive/c/Workspace/Release/test.cfg"
puts "\rSending $file to $server\r"
spawn -noecho $scp $file $user@$server:$destDir
match_max 100000
expect "*?assword:*"
send -- "$PASS\r"
send -- "\r"
expect eof