支持长文件名的Windows rsync,还是一个不错的选择?


13

我目前在Linux主机上rsync,将内容从Windows复制到我的Linux机器上。但是我不能复制长名称的文件。

我已经尝试了DeltaCopycwrsynccygwin。据我发现,所有这些工具都拒绝在文件长度变长时复制文件,这似乎是255个字符左右。

此问题在此处的cwrsync论坛上得到了解决,并且它可能在将来的任何时候cygwin 1.7出现并支持UTF8时都会得到修复。甚至有一个测试版本在这里

在生产系统上使用测试版本时,我不太舒服。我希望有人知道另一个rsync选项。

作为rsync的替代方案,您是否知道我可以从Windows主机复制Linux上的目录结构的另一种工具,而该目录结构不会出现长文件或名称异常的文件的问题?重要的一点是,我需要一个可以轻松通过SSH隧道运行的工具。有些系统没有防火墙,我相信SSH是允许使用的隧道。


仅供参考,cwrsync已发布基于cygwin 1.7的更新,该更新支持长文件名! itefix.no/i2/node/12070
Zoredache

Answers:


6

我可能没有讲到重点,但您是否考虑过在Windows上使用Robocopy。它类似于RSync,但是您不能直接从应用程序中安排它。

通过为副本编写批处理文件,然后创建计划任务,可以解决此问题。Robocopy是免费的,而且功能强大。我经常使用它在使用Samba和网络的Linux和Windows之间复制文件,并且Robocopy的恢复功能确实很强大。


robocopy是我一直在考虑的一个选项,但是它的操作方向错误(从win推到lin),我想从Linux上的Windows中拉取。我怀疑如果找不到更好的东西,我可能必须朝这个方向前进。
Zoredache

5

啊哈!您可以将subst与rsync一起使用。

如果您有一个深目录树d:\ very \ long \ file \ n \ ame \ etc \ etc,那么实验表明您可以将X:替换为d:\ very \ long \ file \ name \ etc,然后rsync到and来自/ cygdrive / x /任何地方。这在客户端和服务器端均有效。

现在,尽管您可以使用策略替代来减少文件名的长度,但我不知道这是否允许您绕过260个字符的限制。它也可能不是很方便。值得一试。

约翰·雷尼。

---- 8 <----

请参阅http://www.ratsauce.co.uk/notablog/LongFilenames.asp,了解我对长文件名的看法。

我不知道如何将\\?\前缀添加到Cygwin,显然,当前版本的Cygwin在内部不使用该前缀。大概他们在新版本中解决了这个问题,这就是为什么它将支持超过260个字符的名称的原因。我在所有地方都使用Cygwin rsync,所以像您一样,我热切地等待发布。

Cygwin rsync还有其他一些问题。除非您指定cygwin = nontsec,否则它会使ACL混乱,而且它往往会挂在很大的目录上。在我死前要做的事情是编写不会出现这些问题的本地Windows版本的rsync。我相信已经做到了,但是只能作为商业版本而不是公共领域的版本。

JR


Rsync似乎挂在大型目录上,因为它必须先读取所有文件。问题是Windows先读取所有文件,然后再启动rsync。根据目录中有多少文件,Windows可能需要花费几分钟的时间来扫描目录。
Ryaner

rsync 3.0不再是这种情况。现在,它将发送一个增量文件列表,以便可以更快地开始发送文件。
James Sneeringer

2

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

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

但是就文件名而言,我不知道它是否如您所愿。

从官方网站:

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


您是否使用了长度超过250个字符的路径?看来在Windows上获取它的唯一方法是通过cygwin,我相信这意味着它将与cygwin rsync完全一样。
Zoredache

我尚未测试长路径,但是Windows的Unison二进制文件是使用cygwin.dll构建的(它与二进制文件捆绑在一起,不需要安装cygwin),因此它可能会正常工作。尝试一下:)
Olivier Jaquemet,2009年


1

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

http://www.okisoft.co.jp/esc/utf8-cygwin/具有UTF8层,其副作用是增加了可能的路径大小。根据其作者的说法,如果要使用更多字符,可以提高补丁中的常量。这似乎更加骇人听闻。

也许不是远程同步的最佳选择,但是Windows rsync声称支持更长的文件名。


这篇文章让我有些担心(cygwin.com/ml/cygwin/2006-05/msg00068.html)- “基本上,有一个930行的补丁程序,其中大多数是新的。FWICS,它可能无法覆盖所有使用Unicode的地方可能需要进行转换(特别是通过文本模式管道发送Unicode很有可能会失败,并且无法正常显示)”
Zoredache

0

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

使用ssh- sshfs吗?

没有ssh-使用VPN并以SMB挂载?

两种方式都可以使您针对文件系统使用功能更强大的Linux rsync客户端。我还没有用10GB的数据完成此操作,所以YMMV。:)


我试图将文件从Windows拉到我的Linux盒子。另外,我真的不想建立档案,因为我正在谈论很多我想每周同步的10GB以上的数据。如果建立档案,我将无法获得增量更新的好处。
Zoredache

好的,修改答案。
考夫兰兹

0

这不会做大文件结构,但是对于长名的相对较小的数据集,您可以考虑使用7-Zip之类的方法来创建一个归档文件,然后rsync可以将其传输。您说过需要将数据从Windows服务器拉到Linux服务器。如果您具有外壳访问权限,则将所需的数据归档在容器中(7-zip),以传输该容器,并在到达服务器时对其进行扩展。这将长文件名问题推到了存档器上,我相信对此会有更好的支持和非Cygwin工具。


0

为了不丢失可移植性,我建议您继续使用rsync并尝试解决255的限制。此限制不再在Windows内部出现,而是在RSYNC代码中出现-实际上,Windows的限制现在大约为2048(如果我记得很好的话)。

我很确定除了您指定的端口外,没有其他rsync端口,建议您使用测试版本并报告可能发现的错误。

如果您不介意使用FTP,则可以尝试LFTP-它确实具有很好的镜像功能,但在备份/同步方面它无法与rsync进行比较。


0

整理了一个脚本该脚本可以临时重命名具有较短名称的文件或目录,以便rsync(和其他程序)可以继续进行。您可以将其用作工具链的一部分,该工具链用于将文件从Linux复制到Windows(rsync或其他方式)。我不知道您所说的“不寻常”是什么意思,所以也许这只能解决您的部分要求。如果对您有帮助,请告诉我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.