Mac에 "␀␀␀␀HFS+ Private Data"라는 폴더가 있습니다. 삭제하려고 하는데 unlink, rm, mv가 숨막히게 혼합된 이상한 문자가 잔뜩 포함되어 있어 삭제와 내용을 삭제하기가 어렵습니다. unlink/rm/mv 바이너리가 다른 작업을 수행하는 경우에 대비하여 unlink()를 직접 호출하는 코드를 작성해 보았습니다. 하지만 아니요, 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
그럼 이 폴더를 어떻게 삭제하나요? 16진수/8진수 코드를 rm 또는 mv 등에 전달할 수 있나요? rm*, sudo 호출 등 생각할 수 있는 모든 것을 시도했습니다. 문제는 해당 캐릭터의 연결 해제 블록이므로 어떻게든 해당 캐릭터를 변경해야 한다는 것입니다. 나는 또한 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+ 특수 폴더입니다.
따라서 여러 디렉터리 항목은 이 숨겨진 디렉터리의 "파일"을 가리키며, 여기에는 실제 파일 데이터와 속성이 추가됩니다.
여기에는 이름 앞에 4개의 0 문자가 있는 것과 같은 몇 가지 특별한 속성이 있으며 메타데이터에는 일반 사용 시 최종 사용자가 해당 내용을 "볼" 가능성을 낮추는 기타 비트도 있습니다.
일부 백업에서 표시되는 폴더로 발견되면(Live Copy가 없음) 안전하게 삭제할 수 있습니다.
폴더에 대한 하드 링크 정보를 저장하는 ".HFS+ Private Directory Data"라는 유사한 숨겨진 파일이 있습니다.
답변4
하나 있는 것 같은데(은퇴?) 사양은 여기:
간접 노드 파일은 다음과 같은 특수 디렉터리에 있습니다.메타데이터 디렉터리. 이 디렉터리는 볼륨의 루트 디렉터리에 있습니다. 메타데이터 디렉터리의 이름은 다음과 같습니다.널 문자 4개그 뒤에 문자열이 온다HFS+개인 데이터. 디렉터리 생성 날짜는 볼륨 루트 디렉터리 생성 날짜로 설정됩니다. 이것k는 보이지 않는다그리고자물쇠 이름비트는 디렉터리의 Finder 정보에 설정됩니다. Finder 정보의 아이콘 위치를 가리킨 위치로 설정(22460, 22460). 이러한 Finder 정보 설정은 필수는 아니지만 메타데이터 디렉터리에 대한 우발적인 변경을 줄이는 경향이 있습니다.하드 링크를 자동으로 추적하는 구현은 일반 파일 시스템 인터페이스에서 메타데이터 디렉터리에 액세스할 수 없게 만들어야 합니다..
노트:
HFS Plus와 대소문자를 구분하지 않는 HFSX에서 사용되는 대소문자 구분 유니코드 문자열 비교는 널 문자를 다른 모든 문자 다음에 정렬하므로 메타데이터 디렉터리는 일반적으로 루트 디렉터리의 마지막 항목입니다. 대소문자를 구분하는 HFSX 볼륨에서는 널 문자가 다른 문자보다 앞에 있으므로 메타데이터 디렉토리는 일반적으로 루트 디렉토리의 첫 번째 항목입니다.
POSIX 의미 체계는 열린 파일을 허용합니다.연결 해제됨(삭제됨). 열려 있지만 연결되지 않은 파일은 하드 링크처럼 HFS Plus 볼륨에 저장됩니다. 열린 파일이 삭제되면 이름이 바뀌고 메타데이터 디렉터리로 이동됩니다. 새 이름은 문자열 "temp"와 10진수 텍스트로 변환된 디렉터리 노드 ID입니다. 이 임시 파일은 파일이 최종적으로 닫히면 삭제될 수 있습니다. 마운트 해제된 HFS Plus 볼륨을 복구할 때 해당 임시 파일이 모두 삭제될 수 있습니다.
메타데이터 디렉터리 복구
하드 링크 또는 메타데이터 디렉터리를 사용하여 HFS Plus 볼륨을 복구할 때 다음 상황을 복구해야 할 수 있습니다.
열려 있었지만 삭제된(현재는 분리된) 파일입니다.
분리된 간접 노드 파일(해당 링크를 참조하는 하드 링크가 없음)
하드 링크가 끊어졌습니다(하드 링크는 존재하지만 간접 노드 파일은 존재하지 않음).
링크 수가 잘못되었습니다.
링크 참조는 0입니다.
열려 있지만 삭제된 파일은 이름이 "temp"로 시작하고 메타데이터 디렉터리에 있는 파일입니다.볼륨이 사용 중이 아닌 경우(마운트되지 않았거나 다른 유틸리티에서 사용되지 않는 경우) 이 파일을 삭제할 수 있습니다.. 저널이 있는 볼륨, 심지어 활성 트랜잭션이 없는 볼륨에도 삭제해야 하는 파일이 열려 있지만 삭제되지는 않았을 수 있습니다.
분리된 간접 노드 파일, 끊어진 하드 링크 또는 잘못된 링크 수를 검색하려면 디렉터리에서 모든 하드 링크 파일을 찾고 각 링크에서 참조하는 발견된 하드 링크 수를 해당 간접 노드 파일의 링크 수와 비교해야 합니다.
링크 참조가 0인 하드 링크는 유효하지 않습니다. 이러한 하드 링크는 디렉토리 레코드의 권한을 사용하지 않는 구현이나 유틸리티에 의해 하드 링크를 복사하거나 복원한 결과일 수 있습니다. 올바른 링크 참조를 확인하여 하드 링크를 복구할 수 있습니다. 그렇지 않으면 하드 링크를 제거해야 합니다.