이것이 출력입니다.
echo *.*
file1.txt file2.txt file3.txt
echo * .*
file1.txt file2.txt file3.txt . ..
두 번째 명령에 마침표 앞에 공백 문자가 없는 경우 이러한 파일이 포함되는 이유는 무엇입니까? 많은 사랑을 주셔서 감사합니다!
답변1
이들은 두 개의 별도 영역입니다. 첫 번째 항목은 *
숨겨진 파일을 제외한 모든 항목과 일치하므로 file1.txt
, file2.txt
및 file3.txt
. 두 번째는 .*
이름이 : 으로 시작하는 숨겨진 파일 및 디렉토리에만 일치하므로 및 를 .
인쇄합니다 ..
..
공백 뒤에 마침표가 있는 파일/디렉터리 이름만 인쇄하려면 공백이 구분 기호로 처리되지 않도록 공백을 이스케이프 처리해야 합니다.
$ ls
file1.txt 'file2 .txt'
$ echo *\ .*
file2 .txt
마지막으로, 이것이 "모든 것과 일치한다"는 뜻은 아니라는 점을 언급하고 싶습니다 *.*
. Windows 시스템과 달리 *nix 시스템에는 파일 이름 확장자가 필요하지 않습니다(드문 예외가 있지만 확장자는 완전히 선택적이고 임의적입니다). *nix 시스템에서 glob은 이름에 a가 있는 파일 이름 *.*
만 인쇄합니다 ..
$ ls
file file1.txt 'file2 .txt'
$ echo *.*
file1.txt file2 .txt
모든 파일을 인쇄하려면 단일을 사용하십시오 *
.
$ echo *
file file1.txt file2 .txt
답변2
명령에 대한 인수는 따옴표로 묶이지 않는 한 공백으로 구분됩니다.
echo *.*
"모든 문자"( *
), 그 뒤에 점( .
) 및 "모든 문자"( )가 포함된 *
파일 이름 과 일치합니다.
echo * .*
첫 번째 패턴은 "모든 문자"( *
)가 포함된 파일 이름과 일치합니다. 두 번째 패턴(" .*
") .
은 점( )으로 시작하고 그 뒤에 "모든 문자"( )가 오는 *
파일 이름 과 일치합니다. 이러한 "도트 파일"은 일치하지 않으므로 *
종종 "숨겨진" 파일이라고 불립니다.
표시되는 두 항목(" .
" 및 " ..
")은 현재 디렉터리와 상위 디렉터리에 대한 필수 링크입니다.
NUL 0x00
공백 및 기타 "흥미로운" 문자(파일 이름에는 슬래시 만 금지됨 /
)가 포함된 파일 이름을 처리하는 것은 복잡하므로(읽기 man find xargs
) 가능하면 피해야 합니다.
파일 이름에 공백을 인용하는 방법에는 여러 가지가 있으며 각 방법마다 세부 사항이 조금씩 다릅니다.
echo *\ .*
echo *" ."*