![find 명령과 와일드카드를 사용한 내부 확장](https://linux55.com/image/76335/find%20%EB%AA%85%EB%A0%B9%EA%B3%BC%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EB%82%B4%EB%B6%80%20%ED%99%95%EC%9E%A5.png)
저는 아직 명령줄을 배우는 중이어서 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)에서 작동합니다.