`find`에서 별표 앞에 백 슬래시가있는 이유는 무엇입니까?


9

이 명령에서 :

find . -name \*.pyc -delete

왜 백 슬래시가 필요한 *.pyc가요?


매뉴얼 페이지 에는 예제와 유사한 find섹션 NON-BUGS과 필요한 이유에 대한 설명 이 포함 된 섹션 이 있어야합니다.
브라이언

답변:


19

인용되지 않은 glob find은 실행 되기 전에 쉘에 의해 확장됩니다 . ( 설명서의 파일 이름 확장 을 참조하십시오 .)

그래서 말하기 :

find . -name *.pyc -delete

실제로 실행합니다 :

find . -name file1.pyc file2.pyc file3.pyc -delete

현재 디렉토리에 3 개의 .pyc 파일이 있다고 가정하면 대신 오류가 발생합니다.

백 슬래시는 쉘을 glob에 전달합니다 find. 즉 *.pyc인용 된 것처럼 작동 합니다.

이상적으로, 당신은 glob를 인용해야합니다 :

find . -name '*.pyc' -delete

@RamRachum, 입력 할 때 더 많은 문자.
Paul Draper

1
@PaulDraper 읽기 쉽고 실수가 적은> 한 번의 키 입력으로 단축
Doorknob

작은 따옴표는 갈 길입니다. 난 당신이 이런 식으로 백 슬래시를 사용할 수 있다고 생각조차하지 않았다 ...
Floris

4

쉘이 find명령을 실행 하기 전에 다양한 확장을 수행 합니다. 그렇게하면 특수 문자 (또는 특별한 의미를 가진 문자)도 처리됩니다. 여기서 *와일드 카드 (글 로빙 문자)가 있습니다. 이것은 소위 파일 이름 확장입니다.

디렉토리에 두 개의 파일이 있다고 가정하십시오.

  • foo.pyc
  • bar.pyc

그런 다음 *.pyc두 이름으로 확장됩니다. 그래서 당신이 쓰는 경우 :

find . -name *.pyc -delete

쉘은 실제로 다음을 호출합니다.

find . -name foo.pyc bar.pyc -delete

에 대한 하나의 인수 만 가질 수 있기 때문에 이치에 맞지 않습니다 -name. 셸에서 특수 문자를 해석하지 못하도록 특수 문자를 이스케이프해야하는 이유입니다. 백 슬래시 이스케이프 처리 또는 인용 부호를 사용하여 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.