내 폴더 중 하나에있는 두 파일의 이름이 어떻게 동일합니까?


12

두 파일을 다운로드했는데 둘 다 동일한 파일 이름으로 저장 한 다음 scp를 사용하여 다른 컴퓨터로 전송했습니다.

왜 두 번째가 구원받을 때 하나가되지 않았습니까?


2
당신은 결과를 보여줄 수 있습니까 ls -la?
ryekayo

2
더 나은 방법은 ls -lb(또는 ls -lab이름이로 시작하는 경우 .)입니다.
G-Man, 'Reinstate

1
또한 정확히 무슨 일이 일어 났습니까? 당신은 다운로드 dir1/foodir2/foo기계 X에, 다음은 scp'에 에드 dir42기계 Y에, 그들은 같은 이름을 가진 별도의 파일로 나왔다? 또는 동일한 이름의 두 파일을 동일한 디렉토리 (시스템 X)에 다운로드했는데 동일한 이름의 별도 파일로 나왔습니까?
G-Man, 'Reinstate

답변:


39

아마도 그들은 같은 이름을 가진 것처럼 보일 것입니다.

시험:

$ touch Stéphane Stéphane Stéphane\  St​éphane
$ ls -1
Stéphane
Stéphane
St​éphane
Stéphane 

그들은 거의 동일하게 보입니다.

$ ls -1b
Stéphane
Stéphane
St​éphane
Stéphane\ 

약간 더 나은. 공백 문자는 \ (모든 ls구현이 그런 것은 아니지만 ) 플래그가 지정됩니다 .

$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\ 
St\342\200\213\303\251phane

이제 우리는 이야기하고 있습니다 (ASCII가 아닌 모든 문자는 바이트 구성 요소의 8 진수 값으로 렌더링됩니다)

당신은 또한 할 수 있고 그것은 모든 입력에서 작동합니다 :

$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $

여기에 선의 끝이 표시되어 $후행 공간을 쉽게 찾을 수 있습니다. 그러나 그것은라는 파일을 발견하는 데 도움이되지 않습니다Stéphane<newline>Stéphane

$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
       s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>

무슨 일이 있었는지 더 명확하게 만듭니다.

주제에 대한 자세한 내용은 이 다른 답변 을 참조하십시오 .


1
Stephane에게 물어 보는 것이 마음에 들지 않는다면 piped 명령 LC_ALL=C sed -n 1은 무엇을합니까?
ryekayo

3
sedl명령은 입력을 시각적으로 명확하게 표시합니다. LC_ALL = C를 사용하면 ASCII 문자 만 사용해야합니다 (최소한 GNU sed에서는 필요하지 않습니다).
Stéphane Chazelas

2
@ StéphaneChazelas 또한 사용할 수 있습니다 :LC_ALL=C ls -b
vinc17

@ vinc17, 좋은 점은 줄 바꿈 문자가있는 파일을 발견하는 데 sed보다 낫지 만 항상 후행 공백을 발견하는 것은 아닙니다. 답변에 추가했습니다.
Stéphane Chazelas

젠장, 파일 이름 끝에 공백이있을 수 있으며 파일 시스템에 동일한 이름의 파일이 두 개있는 것처럼 보입니다.! 좋은 답변, ls | LC_ALL=C sed -n l정말 큰 시간 절약 지금, 감사합니다!
엘리야 린
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.