我在 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 系统而造成的。所以我运行了一个测试,将rsync
Mac 目录中的内容放入闪存驱动器上的空目录中。起初,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
:
...递归地将所有 ._* 文件与其相应的本机文件合并...
- 这点清洁手册页。