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

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

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

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

find . -name *.txt -print

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

find: unknown primary or operator.

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

*내부적으로 확장 하려면 탈출해야 한다고 읽었습니다 find. 작은 따옴표를 사용하면 *명령줄에서 특수 문자로 해석되지 않을 것이라고 생각했기 때문에 혼란스럽습니다. 그런데 확장은 어떻게 발생합니까?

답변1

여기에는 확장을 시도하는 두 부분이 있습니다 *. 즉, 쉘이 호출될 때 find또는 find인수가 처리/사용될 때입니다.

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

find . -name *.txt -print

도착하다

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

find유효한 명령 이 아닙니다.

작은따옴표로 묶으면 쉘이 이를 무시하도록 지시하므로 쉘은 해당 문자열을 인수로 find가져와 잠재적인 이름을 일치시킬 때 사용합니다.*.txt-name

답변2

파일 이름을 큰따옴표로 묶을 수 있습니다.

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

이것은 내 시스템(Debian 8)에서 작동합니다.

관련 정보