이 와일드카드는 어떻게 작동하나요? "*.*"

이 와일드카드는 어떻게 작동하나요? "*.*"

이것이 출력입니다.

echo  *.*
file1.txt file2.txt file3.txt

echo * .*
file1.txt file2.txt file3.txt . ..

두 번째 명령에 마침표 앞에 공백 문자가 없는 경우 이러한 파일이 포함되는 이유는 무엇입니까? 많은 사랑을 주셔서 감사합니다!

답변1

이들은 두 개의 별도 영역입니다. 첫 번째 항목은 *숨겨진 파일을 제외한 모든 항목과 일치하므로 file1.txt, file2.txtfile3.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 *" ."*

관련 정보