使 rsync 不区分大小写

Wim*_*Wim 5 windows linux rsync

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

是否可以让 rsync 忽略这种情况?

miv*_*ivk 6

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

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

然后,你会留下“”的过滤器区分大小写的问题。如果这最终成为您的情况,并且您不愿意应用 Wim 建议的补丁,您可以在过滤器中使用字符类。

它既丑陋又烦人,但它有效:

--exclude="[Tt][Ee][Mm][Pp]/"
Run Code Online (Sandbox Code Playgroud)

或在过滤器文件中:

- Temp/
- temp/
- TEMP/
Run Code Online (Sandbox Code Playgroud)

或更通用但不可读的:

- [Tt][Ee][Mm][Pp]/ 
Run Code Online (Sandbox Code Playgroud)

如果要自动将过滤器文件转换为这种语法,可以使用以下 perl 命令:

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

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

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

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

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


Wim*_*Wim 4

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

  • 为什么这不在主代码中?为什么不应用补丁?GNU tar 有 --ignore-case,并且可以在同一命令行上轻松地在区分大小写的排除文件和忽略大小写的排除文件之间切换。 (3认同)