인코딩 문제로 인해 동일한 파일의 파일 이름이 다릅니다.

인코딩 문제로 인해 동일한 파일의 파일 이름이 다릅니다.

백업을 원본과 비교하여 데이터가 올바른지 수동으로 확인할 계획입니다. 일부 문자(예: åäö)는 원시 데이터에 올바르게 표시되지 않지만 클라이언트(Samba를 통해)가 이를 올바르게 해석하면 걱정할 필요가 없습니다. 백업에서 복원된 데이터는 문자를 올바르게 표시하여 diff에서 동일한 파일(diff는 있지만 완전히 다른 파일)이라고 생각하지 않게 했습니다.

md5 및 , 동일한 파일이지만 이름이 다릅니다.

# md5sum /original/iStock_000003637083Large-barn*
e37c34968dd145a0e25692e1cb7fbdb1  /original/iStock_000003637083Large-barn p? strand.jpg

# md5sum /frombackup/iStock_000003637083Large-barn*
e37c34968dd145a0e25692e1cb7fbdb1  /frombackup/iStock_000003637083Large-barn på strand.jpg

마운트 옵션 및 파일 시스템

/dev/sdb1 on /original type ext4 (rw,noatime,errors=remount-ro)
/dev/sdc1 on /frombackup type ext4 (rw)

로케일

LANG=sv_SE.UTF-8
LANGUAGE=
LC_CTYPE="sv_SE.UTF-8"
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_COLLATE="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_MESSAGES="sv_SE.UTF-8"
LC_PAPER="sv_SE.UTF-8"
LC_NAME="sv_SE.UTF-8"
LC_ADDRESS="sv_SE.UTF-8"
LC_TELEPHONE="sv_SE.UTF-8"
LC_MEASUREMENT="sv_SE.UTF-8"
LC_IDENTIFICATION="sv_SE.UTF-8"
LC_ALL=

OD-C

# ls "/original/iStock_000003637083Large-barn p� strand.jpg" | od -c
0000000   /   v   a   r   /   w   w   w   /   m   e   d   i   a   b   a
0000020   n   k   e   n   _   i   m   a   g   e   s   /   k   u   n   d
0000040   i   d   8   0   /   _   B   a   r   n   /   i   S   t   o   c
0000060   k   _   0   0   0   0   0   3   6   3   7   0   8   3   L   a
0000100   r   g   e   -   b   a   r   n       p 345       s   t   r   a
0000120   n   d   .   j   p   g  \n
0000127


# ls "/frombackup/iStock_000003637083Large-barn på strand.jpg" | od -c
0000000   /   d   a   t   a   /   v   a   r   /   w   w   w   /   m   e
0000020   d   i   a   b   a   n   k   e   n   _   i   m   a   g   e   s
0000040   /   k   u   n   d   i   d   8   0   /   _   B   a   r   n   /
0000060   i   S   t   o   c   k   _   0   0   0   0   0   3   6   3   7
0000100   0   8   3   L   a   r   g   e   -   b   a   r   n       p 303
0000120 245       s   t   r   a   n   d   .   j   p   g  \n
0000135

답변1

Unix 파일 시스템은 파일 이름이 바이트로 구성되어 있기 때문에 로케일 독립적인 경향이 있으며 해당 바이트가 ASCII 범위를 벗어나는 경우 그 의미를 결정하는 것은 응용 프로그램에 달려 있습니다. 오늘날 Unix의 관례는 UTF-8을 사용하여 일부 레거시 환경(주로 아시아 환경)을 제외하고 파일 이름과 기타 모든 것을 인코딩하는 것입니다. 반면 Windows 파일 시스템은 파일 시스템 속성에 인코딩이 지정되어 있는 경향이 있습니다.

다르게 인코딩된 파일 이름을 사용해야 하는 경우 다음 명령을 사용하여 해당 파일 시스템의 번역 보기를 만듭니다.파일 시스템 변환. 바라보다 SSH를 통해 다르게 인코딩된 파일 이름 사용

원래 시스템에는 latin-1로 인코딩된 파일 이름이 있는 것 같습니다. 현재 시스템은 UTF-8을 사용하며 ålatin-1( )로 표시된 단일 바이트 시퀀스는 로 인쇄된 \345UTF-8의 잘못된 시퀀스입니다 . 백업 프로세스로 인해 파일 이름이 UTF-8로 인코딩됩니다. Samba는 구성에 따라 파일 이름을 변환합니다.ls?

기본 인코딩을 사용하여 원본 파일에 액세스하려면 다시 인코딩된 보기를 만듭니다.

mkdir /original-recoded
convmvfs -o icharset=LATIN1,ocharset=UTF8 /original /original-recoded
diff -r /original-recoded /frombackup

(가지고 싶은 권한과 소유권에 따라 다른 옵션이 필요할 수도 있습니다.)

답변2

Unix/Linux에서 파일 이름에는 '\0'(ASCII NUL) 및 '/'(슬래시, 디렉터리 구분 기호)를 제외한 모든 문자가 포함될 수 있습니다. 특히, 이상한 인코딩으로 한자로 파일 이름을 지정하려면 계속하세요. 횡설수설이나 다른 명령이 보일 수도 있지만 ls(1)나쁜 일은 일어나지 않습니다. 다음 은 "알 수 없는/비ASCII 문자"에 대한 일반적인 단축키입니다 p?.'?'

두 파일 이름을 모두 실행하여 od -c다음을 수행해 보세요. 예:

ls /the/dir/offending/fi* | od -c

(glob은 관련 없는 이름을 필터링하고 취향에 맞게 조정하는 것입니다).

출력이 다를 때만 걱정되기 시작합니다. 하지만 Svedish 설정을 고려하면 올바른 이름은 아마도 다른 이름은 이전 설정에서 남은 Latin-4 이름일 것입니다.

관련 정보