rsync 从 mac 到 linux:冒号替换

rsync get from mac to linux: colon replacement

我正在备份 linux 以从远程苹果 mac 同步数据以保存在本地。

linux/mac 使用“/”或“:”定义路径层次, 因此,如果 mac 文件名包含“/”,则 rsync 会将“/”替换为“:”以确保安全。

然而,sharing/networking 备份回 mac 这样会造成麻烦。

有什么方法可以告诉 rsync 使用另一个字符,即“_”?

我可以使用

重命名我的文件
find /path/to/basedir/* -iname "*:*"  | tac |  sed 's/\(.*\):\(.*\)$/mv "&" "_"/' | sh

但这打破了 rsync 增量魔法。

谢谢!

不是 rsync 进行翻译;它由内核和文件系统 API 完成(参见 this previous question and the linked USENIX paper)。棘手的字符在 MacOS 继承的 API 中显示为斜杠,在 unix 继承的 API 中显示为冒号; rsync 使用 unix-heritage API,所以它看到一个冒号。

最好的解决办法不是尝试以不同的方式翻译字符,而是弄清楚您正在使用的 sharing/networking 出了什么问题,并弄清楚为什么 不是' t 进行适当的翻译。