当文件名在终端而不是 Finder 中更改时,rsync 会删除包含特殊字符的文件

当文件名在终端而不是 Finder 中更改时,rsync 会删除包含特殊字符的文件

问题

我使用 macOS 并尝试使用 rsync 同步两个目录 - 一个在我的主目录中,一个在外部 HDD(HFS+)中。

每当我运行 rsync 选项时--delete,我都会发现它会删除并重新发送一些文件,尽管自上次同步以来没有任何变化。它只涉及带有特殊字符(波兰字符)的文件,这些字符我使用终端重命名(毫伏/厘泊)。

但是,如果我设置相同的文件名但使用 GUI 文件管理器(macOS 中的 Finder),则可以正确跟踪文件。

例子

echo "Hello World" > "witaj świecie.txt"我已经使用目录中的 命令创建了一个示例文件~/Test/

我使用以下命令运行 rsync:

rsync -avPh --delete  ~/Test/ /Volumes/Vault/Test

输出:

sending incremental file list
created directory /Volumes/Vault/Test
./
witaj świecie.txt
             12 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/2)

sent 150 bytes  received 80 bytes  460.00 bytes/sec
total size is 12  speedup is 0.05

然后,我重新运行相同的命令,输出是:

sending incremental file list
deleting witaj świecie.txt
witaj świecie.txt
             12 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/2)

sent 147 bytes  received 58 bytes  410.00 bytes/sec
total size is 12  speedup is 0.06

每次连续执行都会产生相同的输出。

当我使用 Finder 更改文件名(实际上是通过重写特殊字符)并rsync再次运行时,输出为:

sending incremental file list
./

sent 99 bytes  received 19 bytes  236.00 bytes/sec
total size is 12  speedup is 0.10

什么原因导致了这种行为?如何解决它?

我的环境:

  • macOS 12.1
  • rsync 3.2.3
locale
LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

相关内容