저는 아직 명령줄을 배우는 중이어서 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)에서 작동합니다.