AIX 6.1에서 일부 파일을 복사(백업용)하려고 했을 때 일부 비표준 문자로 인해 큰 문제가 발생했습니다. 내가 해야 할 일은 파일을 복원하고 다시 제대로 작동할 수 있도록 백업 아카이브의 파일 이름이 정확히 동일하도록 하는 것입니다.
csv 파일에서 이름별로(한 줄씩) 이름을 가져오고 cp를 사용하여 백업 대상에 복사하는 ksh 스크립트를 만들려고 합니다. 스크립트를 실행한 후 새 위치에서 일부 파일이 누락되었음을 깨달았습니다. 몇 가지 조사 끝에 누락된 파일의 원래 디렉터리 이름에 일부 비표준 문자(예: 긴 –, 악센트 부호 문자 등)가 포함되어 있음을 발견했습니다.
복사할 파일 목록이 포함된 csv 파일이 있습니다. 예를 들어 긴 "-"가 있습니다.
cat file_list.csv | grep pattern /path/to/file/some–file_with_pattern
cp를 사용하여 이 특정 파일을 복사하려고 하면(스크립트를 통해 또는 cp를 수동으로 실행하여):
cp /path/to/file/some–file_with_pattern /new/backup/path cp: /path/to/file/some–file_with_pattern: No such file or directory
ls를 사용하여 파일을 표시할 때:
ls /path/to/file | grep pattern some?file_with_pattern
따라서 AIX는 "?"가 포함된 파일을 보게 됩니다. "-" 대신에 cp가 오류를 발생시킵니다. 와일드카드(* 또는 ?)를 사용하여 파일을 복사하면 복사되지만 대상 디렉터리에 "-" 대신 "?"가 표시됩니다. 파일 이름을 "" 또는 ""에 넣으면 대상 디렉터리의 "-" 대신 "?"가 동일합니다. 다른 이름("-" 대신 "?")으로 파일을 복원하면 해당 파일을 사용하는 응용 프로그램이 해당 파일을 참조할 수 없기 때문에 이는 내 필요에 맞지 않습니다.
ksh와 sh를 시도했습니다(bash는 서버에서 사용할 수 없습니다). 로케일을 사용해 보았습니다(LC_ALL="en_US.UTF-8"을 설정하여 UTF8을 강제로 적용). Putty 인코딩 설정을 사용해 보았습니다. 여전히 원래 이름으로 파일을 참조할 수 없으므로 원래 이름을 유지하면서 파일을 복사할 수 없습니다. 쉘 명령을 사용하여 이 파일을 복사하는 방법을 아는 사람이 있습니까?
답변1
여기서 해결해야 할 세 가지 문제가 있습니다.
하나 ?
에ls
ls
파일 이름에 실제 문자를 표시하는 것이 올바르지 않습니다.
예를 들어, 다음 파일 이름에는 ls
다음으로 대체될 수 있는(항상 그런 것은 아님) 문자가 포함되어 있습니다 ?
.
$ eval "$(printf "a='\n' b=\032 c=–")"
$ touch test{"$a","$b","$c"}file
$ ls --quoting-style=literal test*
test?file test?file test–file
그러나 이것은 사용되지 않습니다 ?
(파일을 나열하는 쉘입니다):
$ echo test*
test
file testfile test–file
물론 문자를 표시하려면(인코딩) 다음을 수행하십시오.
$ echo test* | od -An -tc
t e s t \n f i l e t e s t 032 f i l e
t e s t 342 200 223 f i l e \n
od
따라서 파일에 사용된 문자를 실제로 보려면 이와 같은 것을 사용해야 합니다 .
$ touch 'some–file_with_pattern'
$ echo *pattern* | od -An -tc
s o m e 342 200 223 f i l e _ w i t h _ p a t t e r n \n
코딩
인코딩이 utf-8로 올바르게 설정되었기 때문에 위의 em 대시는 항상 보이는 문자로 올바르게 나타납니다( –
예제와는 반대로 ).?
따라서 Translation에서 PuTTY 설정을 확인하고 문자 집합이 UTF-8로 설정되어 있는지 확인하세요.
그런 다음 이 줄을 시도하면 이 웹 페이지에 표시되는 것과 동일한 문자가 인쇄됩니다.
$ echo 'áé€íìïîößđ₣λŕžç× Москва Ελληνικά'
áé€íìïîößđ₣λŕžç× Москва Ελληνικά
파일 시스템 인코딩
위의 두 가지 문제는 파일 시스템 인코딩이 로케일 인코딩과 일치하지 않거나 관련된 두 파일 시스템이 다르지 않는 한 99%의 사례를 해결해야 합니다.
이 문제를 조사하기 전에 위 두 가지 질문에 문제가 없는지 확인하시기 바랍니다. 읽다인코딩 문제로 인해 동일한 파일의 파일 이름이 다릅니다.