使 rsync 不区分大小写

使 rsync 不区分大小写

我正在 Windows 和 Linux 系统之间 rsync 一堆文件。由于并非所有 Windows 都关心大小写,因此 Windows 系统上的某些文件不再具有与 Linux 系统上相同的大小写。但 rsync 现在将这些文件视为不同的文件并上传新副本。

是否可以让 rsync 忽略大小写?

答案1

通常情况下,Windows忽略情况,但是果酱它会改变文件名的大小写。如果您的文件名改变了大小写,那么一定是由于除 rsync 之外的某个程序复制文件并在复制过程中弄乱了大小写。该程序可能配置错误。或者,如果您使用 Samba 服务器,则可能是配置错误。默认情况下,Samba 还会保留文件名的大小写。

因此,也许您可​​以解决文件名意外改变大小写的问题。

然后你就剩下“仅有的“过滤器区分大小写的问题。如果您遇到这种情况,并且不愿意应用 Wim 建议的补丁,您可以在过滤器中使用字符类。

虽然它很丑陋并且令人厌烦,但是它确实有效:

--exclude="[Tt][Ee][Mm][Pp]/"

或者在过滤文件中:

- Temp/
- temp/
- TEMP/

或者更通用但难以阅读的:

- [Tt][Ee][Mm][Pp]/ 

如果您想自动将过滤器文件转换为此语法,您可以使用此 perl 命令:

perl -i.bak -pe 's/([a-z])/[\U$1\E$1]/g' your_rsync-filter.txt

并将其转换回人类可读的形式

perl -i.bak  -pe 's/ \[ [A-Z] ([a-z]) \] /$1/xg' your_rsync-filter.txt

(该-i.bak选项会进行备份并将文件就地转换,而不是转换为标准输出)

至少对于过滤器和包含/排除选项,在 rsync 中有一个不区分大小写的标志会非常好。在此之前,唯一的选择似乎是补丁或复杂的正则表达式类语法。

答案2

Rsync 有一个他们称之为“维护补丁”的东西,它添加了一个--ignore-case开关。你需要从来源为此,请应用ignore-case.patch。您需要在本地和远程端都安装修补后的 rsync 版本。

答案3

您可以尝试使用 rsync 的模糊匹配系统:

-y,--模糊

此选项告诉 rsync 它应该为任何缺失的目标文件查找基础文件。当前算法在与目标文件相同的目录中查找具有相同大小和修改时间的文件或名称相似的文件。如果找到,rsync 将使用模糊基础文件来尝试加快传输速度。

请注意使用- 删除选项可能会删除任何潜在的模糊匹配文件,因此要么使用--删除后或者如果您需要防止这种情况,请指定一些文件名排除。

答案4

没有特定选项可以让 rsync 不区分大小写。不过,NTFS 会保留大小写,所以你不会遇到太多问题。另一方面,FAT 文件系统与 rsync 的问题更多,应该避免这种组合。

相关内容