와일드카드 및 검색 명령. 와일드카드를 ""로 묶는 것과 묶지 않는 것의 차이점

와일드카드 및 검색 명령. 와일드카드를 ""로 묶는 것과 묶지 않는 것의 차이점

파일 개수가 1개를 초과하면 작동하지만 작동하지 않는 이유는 무엇입니까 find . -name "*.jav"? 그들의 기능은 무엇입니까? 왜 리터럴 문자열로 해석되지 않습니까?find . -name *.jav.jav" ""*.jav"

답변1

와일드카드는 명령이 아닌 셸에 의해 확장됩니다. find자체 시간에 쉘과 유사한 와일드카드 일치를 수행하는 몇 안 되는 명령 중 하나입니다.

를 실행하면 ls *.jav먼저 셸이 *.jav일치하는 파일 목록(예: )으로 확장된 file1.jav file2.jav file3.jav다음 ls결과 인수 list 와 함께 셸이 호출됩니다 file1.jav file2.jav file3.jav. 그렇기 때문에 파일에 대해 아무것도 모르고 해당 인수가 파일 이름인지 여부에 상관하지 않더라도 echo *.jav동일한 파일 이름 목록이 표시됩니다.echo

실행할 때 find . -name "*.jav":

  1. 쉘은 명령줄을 구문 분석하여 특수 문자를 식별하고 이를 단어와 구두점으로 분할합니다. 인용된 단어 find, .의 목록만 있습니다 . 인용 되었으므로 쉘에 관한 한 이는 일반적인 문자입니다.-name*.jav**
  2. 쉘은 find지정된 인수 목록( ., -name, ) 을 사용하여 명령을 실행합니다 *.jav.
  3. find*.jav현재 디렉터리 아래의 모든 디렉터리에서 패턴과 일치하는 이름을 가진 파일을 찾습니다.

실행했는데 find . -name *.jav일치하는 파일이 없는 경우 *.jav:

  1. 쉘은 명령줄을 구문 분석하여 특수 문자를 식별하고 이를 단어와 구두점으로 분할합니다. 이것은 인용 되지 않은 단어 , find의 목록일 뿐입니다 ..-name*.jav*
  2. 단어에 *.jav따옴표가 없는 와일드카드가 포함되어 있기 때문에 쉘은 파일 이름 생성을 수행합니다. 일치하는 파일 이름이 없기 때문에 패턴이 확장되지 않은 상태로 유지됩니다.
  3. 쉘은 find결과 매개변수 목록(예: ., -name, ) 을 사용하여 명령을 실행합니다 *.jav.
  4. find*.jav현재 디렉터리 아래의 모든 디렉터리에서 패턴과 일치하는 이름을 가진 파일을 찾습니다.

실행하면 find . -name *.jav현재 디렉터리에 file1.jav, file2.jav및 다음이 포함됩니다 file3.jav.

  1. 쉘은 명령줄을 구문 분석하여 특수 문자를 식별하고 이를 단어와 구두점으로 분할합니다. 이것은 인용 되지 않은 단어 , find의 목록일 뿐입니다 ..-name*.jav*
  2. 단어 *.jav에 따옴표가 없는 와일드카드가 포함되어 있기 때문에 쉘은 파일 이름 생성을 수행합니다. *.jav즉, 일치하는 파일 이름 목록으로 대체됩니다.
  3. 쉘은 find결과 인수 목록(예: ., -name, file1.jav, file2.jav, ) 을 사용하여 명령을 실행합니다 file3.jav.
  4. find도착 시 구문 오류에 대해 불평합니다 file2.jav.

실행하면 find . -name *.jav현재 디렉터리에 일치하는 단일 파일이 포함됩니다 file.jav.

  1. 쉘은 명령줄을 구문 분석하여 특수 문자를 식별하고 이를 단어와 구두점으로 분할합니다. 이것은 인용 되지 않은 단어 , find의 목록일 뿐입니다 ..-name*.jav*
  2. 단어 *.jav에 따옴표가 없는 와일드카드가 포함되어 있기 때문에 쉘은 파일 이름 생성을 수행합니다. *.jav즉, 일치하는 파일 이름 목록으로 대체됩니다.
  3. 쉘은 find결과 매개변수 목록(예: ., -name, ) 을 사용하여 명령을 실행합니다 file.jav.
  4. find완벽하게 유효한 명령이 표시되지만 원하는 것은 아닐 수도 있습니다. 일치하는 파일을 찾는 대신 모든 디렉터리에서 호출된 파일을 find찾으라는 메시지가 표시됩니다 .file.jav*.jav

(쉘 평가 및 확장에는 다른 많은 기능이 있습니다. 여기서는 관련된 기능만 언급했습니다.)

(가장 일반적인 쉘(sh, bash, dash, ksh 등)의 기본 동작을 설명합니다. 일부 쉘은 확장되지 않은 와일드카드로 명령을 실행하는 대신 오류를 표시하거나 일치하지 않는 와일드카드를 null로 확장하도록 구성할 수 있습니다. 도움이 됩니다.)

관련 정보