답변:
인용되지 않은 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
쉘이 find
명령을 실행 하기 전에 다양한 확장을 수행 합니다. 그렇게하면 특수 문자 (또는 특별한 의미를 가진 문자)도 처리됩니다. 여기서 *
와일드 카드 (글 로빙 문자)가 있습니다. 이것은 소위 파일 이름 확장입니다.
디렉토리에 두 개의 파일이 있다고 가정하십시오.
foo.pyc
bar.pyc
그런 다음 *.pyc
두 이름으로 확장됩니다. 그래서 당신이 쓰는 경우 :
find . -name *.pyc -delete
쉘은 실제로 다음을 호출합니다.
find . -name foo.pyc bar.pyc -delete
에 대한 하나의 인수 만 가질 수 있기 때문에 이치에 맞지 않습니다 -name
. 셸에서 특수 문자를 해석하지 못하도록 특수 문자를 이스케이프해야하는 이유입니다. 백 슬래시 이스케이프 처리 또는 인용 부호를 사용하여 수행합니다.
find
섹션NON-BUGS
과 필요한 이유에 대한 설명 이 포함 된 섹션 이 있어야합니다.