
저는 아직 명령줄을 배우는 중이고 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)