디렉터리가 두 번 나열됨

디렉터리가 두 번 나열됨

나한테 뭔가 이상한 일이 벌어지고 있어요. 나는 매우 간단한 스크립트를 사용하여 일부 디렉토리를 생성합니다.

...모든 디렉토리를 생성합니다(올바른 권한이 있는 사용자로 실행). 예:

mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre

하지만 내가 얻는 디렉토리는 두 배입니다! 내가 이것을 할 때 ls -lrt나는 얻는다.

uxel081c: wmb - /home/EAI003A/05_EDSNFE/EAI2ISU/VEA # ls -lrt
total 0

drwxr-xr-x    2 wmb      mqbrkrs         256 Jan 28 15:25 tre
drwxr-xr-x    2 wmb      mqbrkrs         256 Jan 28 15:25 err
drwxr-xr-x    2 wmb      mqbrkrs         256 Jan 28 15:25 arc
drwxr-xr-x    2 wmb      mqbrkrs         256 Jun 12 08:35 tre
drwxr-xr-x    2 wmb      mqbrkrs         256 Jun 12 08:35 tbt
drwxr-xr-x    2 wmb      mqbrkrs         256 Jun 12 08:35 err
drwxr-xr-x    2 wmb      mqbrkrs         256 Jun 12 08:35 arc
drwxr-xr-x    2 wmb      mqbrkrs         256 Jun 13 10:49 tbt

(이중 주의특수, TBT, 아크...)

이중 디렉터리는 동일한 데이터를 가리킵니다.

일반적인 일을 하면 ls얻는다.

uxel081c: wmb - /home/EAI003A/05_EDSNFE/EAI2ISU/VEA # ls
    tre  tre

따라서 디렉토리는 두 개뿐입니다!

무슨 일이야?

답변1

추측을 해야 한다면 이 파일과 파일 이름에 인쇄할 수 없는 문자가 포함되어 있다는 사실에 회의적일 것입니다. 다음 스위치를 사용하여 이러한 특수 문자를 표시할 수 있습니다 ls.

에서 발췌파일 이름에서 인쇄되지 않는 문자 제거

Locating "non-printing" characters in file names

The ls command has all the options you need to detect "hidden" characters:

Command      Function                                         Sample Output
-------      --------                                         ------ ------
ls           hides/interprets nongraphic characters           zzz
ls -b        prints octal codes for nongraphic characters     zzz\010\010\010aaa
ls -q        prints question marks for nongraphic characters  zzz???aaa

이러한 유형의 문자 및 이동 가능 문자에 대한 자세한 내용은 위에 참조된 페이지를 참조하세요.

답변2

내 생각엔 당신이 어느 시점에 Windows에서 스크립트를 편집했고 그 버전은Windows 라인 종결자: CR(캐리지 리턴) 다음에 LF(줄 바꿈)가 옵니다. Unix 쉘의 경우 LF는 줄 종결자이고 CR은 일반 문자입니다. 따라서 스크립트에 다음이 있는 경우(여기서 ␍는 CR 문자임):

mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre␍

그런 다음 편집기에서 다음을 볼 수 있습니다.

mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre

그러나 쉘은 명령 mkdir이 매개변수 -p/home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre␍.

CR 문자가 터미널에 인쇄되면 그 효과는 커서를 줄의 시작 부분으로 이동시키는 것입니다. 사용 시 ls -lCR은 줄 끝 부분에만 나타나므로 눈에 보이는 효과는 없습니다. plain 의 경우 ls끝에 CR있는 두 번째 파일 이름마다 다음 파일 이름 쌍이 이전 줄을 덮어쓰게 됩니다.

다음 명령 중 하나를 사용하여 Unix 줄 끝을 사용하도록 스크립트를 변환합니다.

dos2unix /path/to/script                # if dos2unix is available
sed -i -e $'s/\r//' /path/to/script     # on Linux or Cygwin only
perl -i -e 's/\r$//' /path/to/script

편집자에게도 이 작업을 수행할 수 있는 방법이 있을 수 있습니다. 편집기에서 쉘 스크립트를 편집할 때 행이 "CRLF", "Windows" 또는 "DOS"가 아닌 "LF", "Unix" 또는 "Linux"로 끝나는지 확인하십시오.

UNIX 변형에 따라 파일 이름에 특수 문자를 표시해 보십시오 ls -b. 두 디렉터리를 병합하려면 먼저 파일을 올바른 디렉터리로 이동한 다음 다른 디렉터리를 삭제하세요.ls -Qls -q

mv -i tre/* tre?/
rmdir tre?/

관련 정보