MAC에서(Finder를 사용하거나 "find" 또는 "ls" 명령을 사용하여) 이름에 악센트 문자가 포함된 일부 폴더에 액세스하려고 합니다. 이러한 폴더 중 일부는 MAC에서 완전히 표시되지만 일부는 그렇지 않습니다. 내가 한 일과 내가 찾은 것은 다음과 같습니다.
- "lftp 미러" 명령을 사용하여 서버에서 Synology NAS로 폴더를 가져왔습니다.
- Lftp는 UTF-8 형식의 파일 이름을 처리하도록 구성되었습니다.
- 악센트 부호가 있는 문자가 포함된 MAC의 특정 폴더에 액세스하려고 하면(Finder 또는 "ls" 또는 "find" 명령 사용) 해당 폴더에 액세스할 수 없게 됩니다.
- NAS의 GUI를 사용하여 문제의 폴더 이름에 두 개의 서로 다른 문자로 구성된 악센트 문자가 있음을 발견했습니다(예를 들어 "é"를 제거하는 경우 먼저 악센트를 제거한 다음 "e"를 제거하십시오). .
- 이름에 간단한 악센트 문자가 포함된 폴더는 괜찮습니다.
- 이 파일을 내 MAC에 직접 복사하면(rsync를 사용하여 형식을 UTF-8에서 UTF-8 MAC로 변환) 모든 것이 잘 작동합니다. 나는 변환 명령을 사용할 필요가 없다고 생각합니다. 파일을 복사하기만 하면 됩니다(TBC).
따라서 질문은 "간단하다"입니다. 파일을 사용하기 전에 파일을 체계적으로 변환해야 합니까, 아니면 더 좋은 방법이 있습니까?
또한 미러링된 원격 서버의 디렉터리에 있는 파일을 변환하고 싶지 않습니다. 미러 명령과 관련된 문제를 방지하려면 이름이 바뀐 파일을 다른 위치에 복사해야 합니다.
답변1
내 생각엔 당신이 싸웠던 것 같아요유니코드 정규화질문이 있지만 방법을 잘 모르겠습니다.
내 생각엔 rsync가 macOS의 결합 문자를 깨뜨리는 것 같지만 lftp는 그렇지 않습니다. NAS와 Mac 모두에서 영향을 받는 파일 이름의 16진수 덤프를 수행하여 이를 확인할 수 있습니다. 내 Linux 서버의 예는 다음과 같습니다.
> ls -l
total 1
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFC Pokémon
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFD Pokémon
> find . -name 'NFC*' | hexdump -C
00000000 2e 2f 4e 46 43 20 50 6f 6b c3 a9 6d 6f 6e 0a |./NFC Pok..mon.|
0000000f
> find . -name 'NFD*' | hexdump -C
00000000 2e 2f 4e 46 44 20 50 6f 6b 65 cc 81 6d 6f 6e 0a |./NFD Poke..mon.|
00000010
NFC 파일 이름에서 "é"는 바이트 시퀀스로 표시됩니다 c3 a9
. 이는 U+00E9 문자(악센트가 있는 라틴어 소문자 E)의 UTF-8 인코딩입니다. NFD 파일 이름에서 "é"는 바이트 시퀀스로 표시됩니다 65 cc 81
.둘UTF-8 문자. 65
U+0065 라틴 소문자 E로 디코딩되고 cc 81
U+0301 결합 급성 기호로 디코딩됩니다.
( find
나는 쉘이 파일 이름 인코딩과 와일드카드를 처리하는 방법에 대해 미신적인 불신을 갖고 있었기 때문에 여기서 파일 이름을 인쇄하곤 했습니다.)
그럼에도 불구하고 이 방법을 사용하여 NAS에서 파일 이름이 인코딩되는 방식과 파일 이름을 Mac에 저장할 때 파일 이름에 대해 정확히 수행되는 작업(또는 수행되지 않는 작업)을 확인할 수 있습니다 rsync
.lftp
도대체 무슨 일이 벌어지고 있든 대부분의 경우에는 할 수 있다고 생각합니다.아마도모든 파일 이름을 결합하여 문제를 해결했습니다. 나는 내 서버에서 이 작업을 반정기적으로 수행합니다.
convmv -r -f utf-8 -t utf-8 --nfc /data/AUDIO/Library
참고: 현재 토렌트 클라이언트에 시드 중인 파일에 이 작업을 수행하면 손상될 수 있습니다. 나는 그것이 클라이언트에 달려 있다고 생각한다. 파일 이름의 정확한 바이트 순서에 의존하는 다른 소프트웨어도 재정규화된 파일을 잃을 수 있습니다.