我的 Mac 上有一个名为“␀␀␀␀HFS+ Private Data”的文件夹。我正在尝试删除它,但它包含一堆奇怪的字符,这些字符令人窒息的 unlink、rm 和 mv,使得删除它及其内容变得困难。我尝试编写一些代码来直接调用 unlink() ,以防 unlink/rm/mv 二进制文件正在执行其他操作 - 但不, unlink() 无法解析此字符。
我使用 echo 和 od 来找出这是什么字符:
************@Trinity:~/Desktop/test$ echo -e "␀" | od -t oC -An
342 220 200 012`
我在这里查了342:http://ascii-code.com- 并发现它是 Latin-1 集的一部分。我尝试将其转换为 UTF-8:
************@Trinity:~/Desktop/test$ iconv -f latin1 -t utf-8 "␀␀␀␀HFS+ Private Data"
iconv: ␀␀␀␀HFS+ Private Data: I/O error
那么如何删除这个文件夹呢?我可以将十六进制/八进制代码传递给 rm 或 mv 等吗?我已经尝试了我能想到的一切,包括 rm *、调用 sudo 等。问题是 unlink 对该字符造成阻塞,所以我需要以某种方式更改该字符。我还考虑在虚拟机中安装 Debian 并授予其访问此文件夹的权限,以便我可以从那里进行尝试,以防我的 OS X 环境中的工具出现问题。
编辑:我尝试过这个:
************@Trinity:~/Desktop/test$ echo -e "␀␀␀HFS+ Private Data" | od -t oC -An
342 220 200 342 220 200 342 220 200 110 106 123 053 040 120 162
151 166 141 164 145 040 104 141 164 141 012`
************@Trinity:~/Desktop/test$ echo "\342\220\200\342\220\200\342\220\200\110\106\123\053\040\120\162\151\166\141\164\145\040\104\141\164\141\012" | xargs rm
rm: 342220200342220200342220200110106123053040120162151166141164145040104141164141012: No such file or directory
************@Trinity:~/Desktop/test$ echo "\342"
\342
EDIT2:显示 unlink() 错误
************@Trinity:~/Desktop/test$ unlink test3.txt
************@Trinity:~/Desktop/test$ unlink "␀␀␀␀HFS+ Private Data/1.txt"
unlink: ␀␀␀␀HFS+ Private Data/1.txt: Invalid argument
************@Trinity:~/Desktop/test$ cd "␀␀␀␀HFS+ Private Data/"
************@Trinity:~/Desktop/test/␀␀␀␀HFS+ Private Data$ unlink 1.txt
unlink: 1.txt: Invalid argument
EDIT3:表明这不是 HFS+/文件系统问题,而是文件名问题
************@Trinity:~/Desktop/test$ mkdir "␀␀␀␀testTest"
************@Trinity:~/Desktop/test$ rm -r "␀␀␀␀testTest"
rm: ␀␀␀␀testTest: Invalid argument
EDIT4:这可能是进步......接下来我要搞乱区域设置。
************@Trinity:~/Desktop/test$ ls | grep -i *test* | xxd
0000000: e290 80e2 9080 e290 80e2 9080 7465 7374 ............test
0000010: 5465 7374 0a Test.
************@Trinity:~/Desktop/test$ rm -r $'\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\x74\x65\x73\x74\x54\x65\x73\x74\x0a'
rm: ␀␀␀␀testTest
: No such file or directory
Follow-up to this: nope, false hope. I dropped the \x0a on the end and it 'worked'... kind of.
************@Trinity:~/Desktop/test$ rm -r $'\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\x74\x65\x73\x74\x54\x65\x73\x74'
rm: ␀␀␀␀testTest: Invalid argument
答案1
根据https://apple.stackexchange.com/questions/31734/hfs-private-directory-data该文件夹用于文件系统内部工作。你可能不能删除它,即使你可以,它很可能会破坏你的文件系统。
答案2
我知道这个问题已经为 OP 解决了,但对于任何偶然发现这个问题的人来说,这似乎是 10.11 El Capitan 唯一的问题。我尝试并能够在 OS X 10.4 Tiger 和 OS X 10.10 Yosemite 中删除带有此字符的文件,因此它很可能适用于其他文件。
答案3
仅供参考:
“␀␀␀␀HFS+ Private Data”文件夹是一个 HFS+ 特殊文件夹,用于保存硬链接文件的实际文件数据和元数据。
因此,多个目录条目指向此隐藏目录中的一个“文件”,该文件又附加了实际的文件数据和属性。
它具有一些特殊属性,例如名称中的四个前导零字符,以及元数据中的一些其他位,这使得最终用户在正常使用中不太可能“看到”它。
当在某些备份(因此没有实时副本)中发现它作为可见文件夹时,如果系统允许您这样做(可能是在使用十六进制编辑器或其他工具进行低级重命名之后),您可以安全地删除它。
有一个类似的隐藏文件,名为“.HFS+ Private Directory Data”,用于存储文件夹的硬链接信息。
答案4
看起来好像有一个(退休了?) 规格在这里:
间接节点文件存在于一个特殊的目录中,称为元数据目录。该目录存在于卷的根目录中。元数据目录的名称是四个空字符后面跟着字符串HFS+私有数据。目录的创建日期设置为卷根目录的创建日期。这k是不可见的和锁定名称位在目录的 Finder 信息中设置。 Finder信息中的图标位置设置为点(22460, 22460)。这些 Finder 信息设置不是强制性的,但它们往往会减少对元数据目录的意外更改。自动跟踪硬链接的实现应该使元数据目录无法从其正常文件系统接口访问。
笔记:
HFS Plus 使用的不区分大小写的 Unicode 字符串比较和不区分大小写的 HFSX 将空字符排序在所有其他字符之后,因此元数据目录通常是根目录中的最后一项。在区分大小写的 HFSX 卷上,空字符排在其他字符之前,因此元数据目录通常是根目录中的第一项。
POSIX 语义允许打开的文件未链接的(已删除)。这些打开但未链接的文件存储在 HFS Plus 卷上,就像硬链接一样。当打开的文件被删除时,它会被重命名并移动到元数据目录中。新名称是字符串“temp”,后跟转换为十进制文本的目录节点 ID。当文件最终关闭时,该临时文件可能会被删除。修复未安装的 HFS Plus 卷时,可能会删除所有此类临时文件。
修复元数据目录
使用硬链接或元数据目录修复 HFS Plus 卷时,可能需要修复以下几种情况:
打开但已删除的文件(现在是孤立的)。
孤立的间接节点文件(没有硬链接引用它们)。
硬链接损坏(硬链接存在,但间接节点文件不存在)。
链接计数不正确。
链接引用为 0。
打开但已删除的文件是名称以“temp”开头且位于元数据目录中的文件。如果该卷未在使用(未安装,并且未被任何其他实用程序使用),则可以删除这些文件。带有日志的卷,即使是没有活动事务的卷,也可能已打开但未删除的需要删除的文件。
检测孤立的间接节点文件、损坏的硬链接或不正确的链接计数需要查找目录中的所有硬链接文件,并将每个链接引用的找到的硬链接数量与相应间接节点文件的链接计数进行比较。
链接引用等于 0 的硬链接无效。这样的硬链接可能是由不使用目录记录中的权限的实现或实用程序复制或恢复硬链接的结果。通过确定正确的链接引用可以修复硬链接。否则,应删除硬链接。