On에서는 현재 디렉토리로 Ubuntu 14.04, 64 bit
설정했습니다 . 하위 문자열이 있는지 /lib/modules/4.2.0-27-generic/kernel/drivers
모든 파일을 검색할 계획입니다 . net
정규식을 사용하여 검색하면 디렉터리 *net*
만 ./net
검색 결과로 반환됩니다. 그러나 정확한 파일 이름을 지정하면 관련 파일만 나열됩니다(교차 확인할 정확한 파일 이름을 항상 알 수 없기 때문에 쓸모가 없습니다).
$ find . -name *net*
./net
$ find . -name *usbnet*
./net/usb/usbnet.ko
$ pwd
/lib/modules/4.2.0-27-generic/kernel/drivers
내가 무슨 실수를 했나요?
답변1
*net*
인용이나 이스케이프 없이 그냥 사용하면 쉘은 명령이 실행 net
되기 전에 현재 디렉토리의 (기존) 파일/디렉토리로 명령을 확장 하기 때문입니다 find
. 따라서 명령은 다음과 같습니다.
find . -name net
보시다시피 그냥 일치하는 net
것이므로 usbnet.ko
일치하지 않습니다.
또한 인용 및 이스케이프 없이 패턴이 일치하지 않는 경우(및 nullglob
비활성화 failglob
된 경우) 다음과 같이 처리됩니다.있는 그대로. 예를 들어, find . -name *net*
현재 디렉터리에 파일 이름이 없으면 net
find 패턴은 를 반환합니다 *net*
.
따라서 문제를 해결하려면 쉘 와일드카드를 피해야 합니다. 이를 위해 인용되거나 이스케이프된 와일드카드 패턴을 사용할 수 있습니다.
find . -name '*net*'
find . -name "*net*"
find . -name \*net\*