이 명령의 물음표는 무엇을 의미합니까?
find . –type d –name "?d*" –print
그것 없이 실행해 보았지만 아무런 변화도 느끼지 못했습니다.
답변1
물음표는 파일 이름의 문자 하나와 정확히 일치합니다. 그래서,
find -name "c?t"
cat
and 는 일치 cot
하지만 coat
or 는 일치하지 않습니다 ct
.
가치가 있는 것은 매우 일반적인 파일 이름 일치 규칙이며 다양한 명령줄 인터페이스 컨텍스트, 심지어 Windows의 cmd
.
일치하는 항목이 없으면 물음표를 제거하면 차이가 발생합니다.
답변2
"?d*"
in의 패턴은 find . -type d -name "?d*" -print
쉘이 아닌 find(depquid가 올바르게 명시한 대로)에 의해 해석되며 첫 d
번째 문자가.
예를 들어, 디렉토리 및 존재하는 경우 .dad
find 명령은 다음을 인쇄합니다 ada
.xd
./.dad
./ada
./xd
그리고 쉘 명령 echo ?d*
(?d* 패턴이 쉘에 의해 해석되는 경우)은 최소한 인쇄됩니다(패턴과 일치하는 모든 파일의 이름이 있습니다).
ada xd
반면에 두 번째 문자가 있는 디렉토리가 존재하지 않으면 d
find는 출력을 생성하지 않습니다.
?d*
답변3
물음표는 쉘에서 단일 문자로 인식됩니다. 이 경우 이름은 이름이 두 번째 문자 "d"이고 그 뒤에 다른 문자가 오는 디렉터리로 지정됩니다.
find
-name 사양과 일치하는 디렉터리 이름이 없기 때문에 아무것도 출력되지 않습니다.
답변4
find . -name '?*.*'
"some (one) thing" 다음 "anything" "dot" "anything"과 일치합니다.
노트:
- "찾기" 검색 모드입니다.아니요정규 표현식이 아닌 bash glob 확장입니다.
- "아무것도"에는 "아무것도"가 포함될 수 있습니다.
따라서 위의 내용은 모든 name.extension 및 .name.extension과 일치하지만 이름이 없는 ".extension"(또는 확장자가 없는 이름)은 일치하지 않습니다.
질문의 "?d*" 패턴은 "d"가 뒤에 오는 단일 문자로 시작하는 모든 이름과 일치합니다.