一位朋友在使用复制磁盘映像(准确地说是稀疏包)时遇到了麻烦cp
。我发现他使用的那行将所有 /contents/(稀疏包是包,即在 GUI 中被视为文件的目录)复制到新目录,而不是复制稀疏包本身。
后来,我在电脑上创建了一个 sparsebundle 来进行实验,cp
并重现了他得到的行为。随后,Finder 和 Dock 开始/tmp
像对待文件一样对待它。单击我在侧边栏中为其创建的条目将打开一个终端窗口/tmp ; exit;
(当然,这会失败,因为/tmp
它是一个目录)。我仍然可以像平常一样使用 Stack,除了Open in Finder
底部的选项会尝试执行它。
奇怪的是,我仍然可以/tmp
通过打开子目录并使用Go > Enclosing Folder
命令 ( command+ up arrow) 在 Finder 中打开它。我还可以通过命令行正常访问它。
我尝试删除并重新创建侧边栏条目和 Stack,但这样做只会让 Dock 将其显示为文件,并在我单击它时尝试立即执行它。然后我尝试重新启动以清除它;它似乎确实像往常一样被清除了,但这并没有影响问题。
有人可以解释一下这个问题吗?
更新:我想尝试一下ls -l
,它在权限字段的末尾有一个@。我发现它有一个com.apple.FinderInfo
扩展属性,但我尝试读取它时只得到了以下内容:
00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
删除扩展属性(xattr -d com.apple.FinderInfo /tmp
就我而言,没有提升权限)似乎已经解决了这个问题,但从我对它的快速搜索中我可以看出,它可能会产生其他负面影响(我不确定com.apple.FinderInfo
以前那里是否有属性……)。我仍然想知道可能发生了什么以及为什么会出现这种行为。
答案1
FinderInfo xattr 中的“20”表示已设置 bundle 位。bundle 位告诉 Finder 将文件夹显示为文件,而不是文件夹。我怀疑此属性是从 sparsebundle(实际上是一个文件夹,但 Finder 显示为简单文件)复制而来的。因此,您看到的是设置该标志后或多或少符合预期的行为。