Osx

用奇數字元重命名文件夾

  • February 28, 2019

我的 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 集合的一部分。我嘗試使用 iconv 將其轉換為 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 阻塞了那個角色,所以我需要以某種方式改變那個角色。我還在考慮在 VM 中安裝 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

根據https://apple.stackexchange.com/questions/31734/hfs-private-directory-data該文件夾用於文件系統內部工作。您可能無法刪除它,即使可以,它也很可能會破壞您的文件系統。

我知道這已經為 OP 解決了,但是對於任何偶然發現這個問題的人來說,這似乎是 10.11 El Capitan 唯一的問題。我嘗試並能夠在 OS X 10.4 Tiger 和 OS X 10.10 Yosemite 中刪除具有此字元的文件,因此它很可能適用於其他文件。

引用自:https://unix.stackexchange.com/questions/253932