从 Mac 10.13 到 Pop_OS 20.04 的 rsync 从 Mac xattr 创建隐藏文件

从 Mac 10.13 到 Pop_OS 20.04 的 rsync 从 Mac xattr 创建隐藏文件

我在 Mac 10.13 (APFS) 和 Pop_OS (ext4) 之间使用 rsync,并使用闪存驱动器作为传输介质 (FAT)。我的命令是

rsync -av --exclude-from='exclude-files.txt' source-dir destination-dir

我排除了以下模式,因为我假设它们仅与 Mac 相关:

*.DS_Store*
*.Spotlight-V100*
*.TemporaryItems*
*.Trashes*
*.fseventsd*

如果 Mac 文件具有任何扩展属性,它们会作为隐藏文件出现在 FAT 闪存驱动器和我的 Linux 系统上,例如._exclude-files.txt.

如果我ls -al@在 Mac 上安装的闪存驱动器上运行,我看不到这一点,._exclude-files.txt但我确实看到以下 xattr 列表:

com.apple.TextEncoding    15
com.apple.metadata._kMDItemUserTags    42
com.apple.lastuseddate#PS    16

当我在 Linux 笔记本电脑上安装闪存驱动器时,我确实看到了._exclude-files.txt实际的文件。

我尝试过-X使用 with 和 without 选项进行 rsync 试运行--filter='-x! user.*'(尽管我承认没有完全理解用户命名空间的概念)。

我可能可以通过排除来解决这个问题*._*,但我宁愿理解为什么会发生这种情况。我是 Linux/Ubuntu/Pop 的新手,但我的目标是让它成为我的主要操作系统。

更新:我想知道我的问题是否是由于最初将目录从我的 Mac 复制到我的闪存驱动器,然后复制到我的 Linux 系统而造成的。所以我运行了一个测试,将rsyncMac 目录中的内容放入闪存驱动器上的空目录中。起初,ls -al@在我的 Mac 上安装的闪存驱动器目录中显示的文件没有任何 xattr。所以我删除了原来Mac目录下的内容并试图rsync --dry-run再次回复他们。._my-file.txt尽管该文件没有显示任何 xattr,但再次显示了详细的输出。

当我尝试这个时,-X出现 rsync 错误: rsync: get_xattr_names(...) failed: Operation not permitted (1)

但好消息是详细输出仅显示正在发送的 my-file.txt,而不是神秘的 ._my-file.txt。

我想我可以忍受这一点,然后就跑了rsync -avX flash_drive_volume original_mac_dir。现在原来的文件又回到了原来的位置,但出乎我意料的是,它又拥有了扩展属性。

就好像 MacOS 决定以一种方式设置扩展属性一样。我不在乎,只是我不想让我的 Linux 系统充满不相关的文件。也许我应该添加*._*到我的排除项中并忘记这一点?

更新 2:我找到了 ._ 文件的解释。Mac OS X:Apple 双格式创建带有前缀“._”的文件名

答案1

我想经过一番研究后我会尝试回答我自己的问题。当我在 Linux 系统上查看“file ._my-file.txt”时,它返回“AppleDouble Macintosh 文件”。所以我搜索了“appledouble”。

首先,根据我上面的更新 2:

在 Mac OS X 中,有一种称为“Apple Double”的机制,允许系统使用不具有分叉文件功能的磁盘格式...Apple Double 通过将文件转换为两个单独的文件来实现此目的。第一个新文件保留原始名称并包含原始文件的数据分支。第二个新文件的名称与原始文件的名称相同,前缀为“._”,并且包含原始文件的资源分支。

似乎rsync从 Mac 到 Linux 会创建这些“._”文件,rsync从 Linux 返回 Mac 会将它们发送回 Mac,除非我首先删除它们(例如find . -name *._* -delete)或排除它们。

如果这些 ._ 文件最终出现在 Mac 上,则有一个 Mac 命令dot_clean

...递归地将所有 ._* 文件与其相应的本机文件合并...

- 这点清洁手册页。

这已经在 Ask Different 上讨论过这里,这里, 和这里

相关内容