~/testing $ echo Hello > hello.txt
~/testing $ echo Goodbye > goodbye.txt
~/testing $ cat goodbye.txt hello.txt > HELLO.txt
^C
~/testing $ ls -l
total 9056
-rw-r--r-- 1 user user 8 25 Jul 16:21 goodbye.txt
-rw-r--r-- 1 user user 4631048 25 Jul 16:22 hello.txt
~/testing $
세계보건총회? 여기에 뭔가가 빠졌습니다. 파일을 무감각하게 삭제하는 옵션이 없나요? 이게 왜 원형으로 보이는 걸까요?
답변1
Mac OS X은 기본적으로 대소문자를 구분하지 않는 파일 시스템을 사용합니다. 변경하려면 대소문자를 구분하는 옵션을 사용하여 디스크를 다시 포맷해야 합니다. 주요 공급업체에서 작성한 일부 프로그램에 유의하세요.<cough>Adobe</cough>, <cough>Microsoft</cough>대소문자를 구분하는 파일 시스템에 심각한 문제가 있습니다.
파일 시스템은 대소문자를 구분하지 않지만 모든 파일은 대소문자를 구분하지 않습니다. 즉, +(대문자 H, 탭 순)라는 이름의 파일이 있으면 hello.txt
완성 후보를 얻을 수 없습니다(쉘을 구분하지 않는 완성으로 설정하지 않는 한).shiftHTab
답변2
cat goodbye.txt hello.txt > HELLO.txt
사건의 연속:
- 쉘은 hello.txt를 0바이트로 자릅니다.
- cat은 hello.txt를 가리키는 stdout에byby.txt의 내용을 씁니다.
- cat은 hello.txt를 읽기 시작하고 읽은 내용을 stdout에 기록합니다. stdout은 여전히 hello.txt를 가리킵니다. cat은 동일한 파일을 읽고 쓰기 때문에 파일 끝에 도달하지 않고 파일 시스템이 가득 찰 때까지 hello.txt에 계속 추가합니다.
답변3
OSX에서 디스크 포맷을 위한 기본 옵션은 HFS+ 저널링(대소문자 구분 안 함)입니다. 이 동작을 원할 경우 대소문자를 구분하도록 형식을 명시적으로 설정해야 합니다.
당신이 보고 있는 행동은 의도적인 것입니다.