find 명령과 와일드카드 문자를 사용한 내부 확장

find 명령과 와일드카드 문자를 사용한 내부 확장

저는 아직 명령줄을 배우는 중이고 find 명령 내에서 와일드카드 사용을 완전히 이해하는 데 어려움을 겪고 있습니다.

나는 user/temp 디렉토리에서 작업 중이며 다음과 같이 find 명령을 사용하여 모든 .txt 파일을 찾습니다.

find . -name *.txt -print

이로 인해 오류가 발생합니다.

find: unknown primary or operator.

*.txt확장을 피하고 원하는 결과를 얻으려면 작은따옴표를 사용해야 한다는 것을 알고 있습니다 . 그러나 왜 이런 작업을 수행해야 하는지 이해가 되지 않습니다.

내부적으로 확장이 이루어지도록 *이스케이프 처리해야 한다는 내용을 읽었습니다 . find작은 따옴표를 사용하면 명령줄에서 특수 문자로 해석되지 않을 것이라고 생각했기 때문에 혼란스럽습니다. *확장은 어떻게 이루어지나요?

답변1

여기에는 확장을 시도할 수 있는 두 부분이 있습니다 . 즉, 호출할 때 또는 인수를 처리/사용할 때의 *셸입니다 .findfind

작은따옴표를 사용하지 않으면 쉘이 이를 확장하므로 현재 디렉토리에 a.txt 및 b.txt가 있는 경우 명령줄은 다음에서 확장됩니다.

find . -name *.txt -print

에게

find . -name a.txt b.txt -print

find유효한 명령 이 아닙니다

작은따옴표를 사용하면 쉘에 그대로 두도록 지시하므로 find문자열을 *.txt인수로 가져오고 -name잠재적인 이름을 일치시킬 때 사용합니다.

답변2

파일 이름을 큰따옴표로 묶어서 시도해 볼 수 있습니다.

찾다 . -이름 "*.txt" -인쇄

내 시스템에서 작동합니다 (Debian 8)

관련 정보