如何使用命令行同步FTP目录?

7

我有一个包含PHP文件和其他内容的网站。我希望能够实现本地网站副本和服务器网站之间的一键同步。最好能够提供命令行工具或Eclipse PDT插件来实现这个功能。


我的操作系统是Windows,服务器使用的是Linux。 - Tom Smykowski
好的,你需要一个带有命令行支持的同步工具用于windows系统。如果你已经安装了Python,那么可以尝试使用免费的ftpsync2d工具。 - Konstantin Tarkus
http://code.google.com/p/ftpsync2d/ - Konstantin Tarkus
8个回答

13

我建议使用lftp。这是一个复杂、可编写脚本的命令行FTP客户端。

 lftp has builtin mirror which can download or update a whole
 directory tree. There is also  reverse  mirror  (mirror  -R)
 which  uploads or updates a directory tree on server. Mirror
 can also synchronize directories between two remote servers,
 using FXP if available.

使用 lftp 命令执行 mirror.sh 脚本。

mirror.sh

open sftp://<username>:<password>@<ip address>
mirror -c /<source> /<destination>
exit

那个链接是Linux版本的。不知道Windows版本是否还在维护,但这里有一个副本:http://redpark.posterous.com/lftp-for-windows - Simon East
它仍在维护——2013年03月14日:发布了lftp-4.4.5。修复了一个性能漏洞。 - schmunk
2
lftp的链接现在已经消失了,因为posterous已经关闭了:( - Matthew Lock

8
我找到了WinSCP,它是一个FTP工具,免费且开源:http://winscp.net/eng/docs/start。此外,它可以通过命令行进行文件比较(用来同步文件)。

WinScp下载更新很好用,但有没有办法让它删除不再存在于FTP服务器上的文件? - Mike
2
@Mike,看起来需要使用synchronize -delete命令进行同步操作? - Roman Starkov

7

有一个名为FTP Synchronizer的工具(适用于Windows),可以从命令行运行。如果不使用任何FTP库,您无法通过FTP同步文件。该库越成熟,同步文件的速度就越快(例如,它可以在其内部数据库中缓存已同步的文件信息)。

不喜欢FTP同步器?Google搜索替代方案


2
我已经在我专用的Windows服务器上使用scriptFTP超过一年的时间,将我的数据库备份目录与本地服务器同步。这是一个非常优秀的产品,可以编写脚本(到相当高级的水平)并计划几乎任何FTP任务。
我与该产品没有任何关联 - 只是一个非常满意的用户。该产品完全解决了它所设计解决的问题,并且对我来说非常可靠。它是商业软件 - 35美元 - 但是我花在软件上最好的35美元之一。

0
你可以尝试使用Aptana(http://www.aptana.org/studio/download),它提供了一个文件传输工具,可以使用FTP将项目与远程服务器同步。 你可以使用脚本视图来启用一个很好的功能:保存当前文件时上传!

0

我确实阅读了整个问题,但这个问题写得很糟糕,因为对于可能需要一个IDE插件的请求只是在最后作为附注添加的。标题只提到了命令行,而在谷歌上排名靠前的答案却是关于IDE插件的。 - Matt Fletcher

0

我写了一个简单的脚本

#!/bin/bash

FTPLOCALFOLDER=$1
FTPLINK=$2

ls "$FTPLOCALFOLDER" > "./filesdownloaded.txt"

curl -sS "$FTPLINK" | grep -oE "(?href=\").*?(?\")" | awk -F '"' '{print $2}' > "./filesinlink.txt"

grep -v -f "./filesdownloaded.txt" "./filesinlink.txt" > "./filestodownload.txt"

echo "Start downloading"
while read p; do
    echo "downloading..... $p from $FTPLINK$p"
    wget "$FTPLINK""$p" -O "$FTPLOCALFOLDER""$p"
done < "./filestodownload.txt"

你可以这样使用:
./wgetSync.sh

-3
听起来这似乎是版本控制软件的完美应用。选择mercurialgit,并将其用于两台机器上目录内的版本控制和同步。Mercurial总体上更加用户友好,在Windows上安装和使用也更加顺畅,尽管在Windows上设置Git也不再太麻烦。

4
这不是一个答案!他没有问“嘿,我想同步FTP,但请给我一个不同的解决方案”。这让我非常生气。如果有人无法使用git,比如他们糟糕的客户端由一家1997年创立的可怕IT公司提供支持,只允许使用CPanel和MySQLAdmin访问呢?如果您认为阅读这篇文章的人从未听说过Git,请在问题下面发表评论。但这不是问题的解决方案! - Matt Fletcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接