支持长文件名的Windows rsync,还是一个很好的select?

我目前在Linux主机rsync复制从Windows到我的Linux机器的东西。 但我不能复制长名称的文件。

我曾尝试过DeltaCopy , cwrsync和cygwin 。 从我发现的所有这些工具拒绝复制文件时,文件的长度变长,这似乎是在大约255个字符的地方。

这个问题在这里的cwrsync论坛上得到了解决,据说在cygwin 1.7出来并支持UTF8的时候,它可能会在将来被修复。 这里甚至还有一个testing版本。

在生产系统上使用testing版本并不是特别舒服。 我希望有人知道另一个rsync选项。

作为rsync的替代方法,你是否知道另一个工具,我可以在Linux上从Linux主机复制一个目录结构,这对长文件或exception命名的文件没有问题? 重要的是我需要一个可以轻松在SSH隧道中工作的工具。 有些系统不在防火墙之内,我相信SSH是我可以使用的隧道。

我可能会错过这一点,但你有没有考虑过在Windows上使用Robocopy 。 它与RSync类似,但不能直接从应用程序调度它。

这可以通过编写复制的batch file,然后创build一个计划任务来克服。 Robocopy是免费的,非常强大。 我经常用它来使用Samba和networking在Linux和Windows之间复制文件,Robocopy的恢复能力非常强大。

啊哈! 你可以在rsync中使用subst。

如果你有一个深层的目录树d:\ very \ long \ file \ n \ ame \ etc \ etc,那么实验表明你可以用X:到d:\ very \ long \ file \ name \ etc然后rsync和从/ cygdrive / x /无论。 这在客户端和服务器端都起作用。

现在虽然你可以使用战略substs来减less文件名的长度,我不知道这是否允许你绕过260个字符的限制。 这可能也不是很方便。 值得一试虽然。

约翰·雷尼

—- 8 <—-

请参阅http://www.ratsauce.co.uk/notablog/LongFilenames.asp,了解我的长文件名&#x3002;

我不知道有什么办法可以将Cygwin的前缀join到Cygwin中,显然Cygwin的当前版本并没有在内部使用前缀。 大概他们在新版本中解决了这个问题,这就是为什么它会支持超过260个字符的名字。 我使用Cygwin rsync遍布整个地方,所以像我一样急切地等待发布。

Cygwin rsync还有一些其他的问题。 除非你指定cygwin = nontsec,否则会造成一团乱七八糟的ACL,而且它往往会挂在非常大的目录上。 在我死之前要做的事情之一是编写一个本地Windows版本的rsync,不会有这些问题。 我相信这已经完成了,但只是作为商业版本而不是公有领域的版本。

JR

我build议你尝试Unison http://www.cis.upenn.edu/~bcpierce/unison/

这是一个非常有趣的rsync替代品,因为它也可以提供双向同步(这是rsync无法做到的)。 我已经在2台虚拟机上成功使用了它,并对结果非常满意。

但是就长文件名而言,我不知道它是否可以按你的意思工作。

从官方网站:

Unison是Unix和Windows的文件同步工具。 它允许将文件和目录集合的两个副本存储在不同的主机上(或同一主机上的不同磁盘上),分别进行修改,然后通过将每个副本中的更改传播到另一个副本来进行更新。

只是注意到,我遇到了同样的问题(1.7以前的cygwin的限制),并find了cygwin 1.7的cwrsync工作版本:

http://www.doering-thomas.de/page.php?seite=1&sub=6&lang=en#rsync

(来自cwrsync论坛的原始链接)

不完全正式版本,但它解决了我的字符集问题:)

http://lists.samba.org/archive/rsync/2009-March/022955.html

http://www.okisoft.co.jp/esc/utf8-cygwin/有一个UTF8图层,它具有增加可能path大小的副作用&#x3002; 根据它的作者,如果你想使用更多的字符,你可以在补丁中的常数。 这似乎更加黑客。

可能不是你最好的select远程同步,但是是一个Windows rsync声称支持更长的文件名。

所以,如果Windows上的工具不好,有没有办法使用Linux工具?

用ssh – sshfs ?

没有SSH – 使用VPN并挂载为SMB?

无论哪种方式将允许您使用function更强大的Linux rsync客户端对文件系统。 我没有用10GB的数据做这个YMMV。 🙂

这不会做大的文件结构,但是对于名称较长的相对较小的数据集,您可以使用7-Zip之类的东西来创build一个rsync然后可以传输的归档文件。 你说过,你需要将Windows服务器的数据提取到Linux服务器上。 如果您有shell访问权限,则将需要的数据存档到一个容器(7-zip)中,然后将其传递到服务器。 这将长文件名问题推到了归档器上,为此我相信有更好的支持和非Cygwin工具。

为了不丢失可移植性,我build议你留在rsync,并尝试解决255的限制。 这个限制不再是在Windows内部,而是在RSYNC代码 – 事实上,Windows上的限制大约在2048年左右(如果我还记得的话)。

我敢肯定,没有其他rsync端口比你指定的,我build议你使用testing版本,并报告任何错误,你可能会发现。

如果您不介意使用FTP,您可以尝试使用LFTP – 它具有非常好的镜像function,但是在备份/同步时不会与rsync进行比较。

我一起砍了一个脚本 ,可以暂时重命名短名称的文件或目录,以便rsync(和其他程序)可以继续。 您可以使用它作为工具链的一部分,用于将文件从Linux复制到Windows(rsync或其他)。 我不知道你是什么意思的“不寻常的”,所以也许这只是你的要求的一部分。 请让我知道它是否对你有帮助。