.ly
예를 들어 이 디렉터리와 또는 로 끝나는 하위 디렉터리의 모든 파일을 일치시키려고 합니다 .ily
. 지금까지는 find . -name "*.*ly" -print
이것이 내가 얻을 수 있는 가장 가까운 것이지만 내가 원하지 않는 파일 이름을 찾을 수도 있습니다.
답변1
-o
"또는" 옵션인 이 옵션을 사용할 수 있습니다 .
가장 간단한 버전은
find . -name '*.ly' -o -name '*.ily'
-print
이는 기본 작업이기 때문에 작동합니다 .
하지만 이것이 -print
단지 예일 뿐이라면 이 두 절을 결합해야 할 수도 있습니다.
find . \( -name '*.ly' -o -name '*.ily' \) -print
답변2
zsh
glob에는 **/
재귀적 globbing 연산자와 glob 한정자가 있으므로 수행할 수 있는 대부분의 작업을 find
glob으로 수행할 수 있습니다. 0 또는 1, 일명.임의로 선택할 수 있는거기에서 뭔가를 할 수 있습니다 (|something)
(아무것도 하지 않거나무엇(#cX,Y)
), 정규식과 유사한 임의 {X,Y}
간격 연산자 도 있지만 (필수 set -o extendedglob
):
print -rC1 -- **/*.(|i)ly(N)
find
이는 정렬된 목록 제공, 숨겨진 파일 건너뛰기( D
필요한 경우 한정자 사용), ./
접두사 방지 및 임의의 파일 이름 사용(많은 find
구현에는 유효한 텍스트가 아닌 파일 이름에 대한 GNU find
차단이 포함됨) 로캘)과 비교하여 사용자에게 이점이 있습니다. 단순히 인쇄하는 것 이상이 필요한 경우 파일 목록을 처리하는 것이 더 쉽고 안전할 때가 많습니다.
답변3
-regex
또 다른 해결책은 find
이를 지원하는 구현과 함께 사용하는 것입니다.
find -regex '.*\.i?ly'
# or the full command
find . -regextype posix-extended -regex '.*\.i?ly'
그리고BSDfind
:
find -E . -regex '.*\.i?ly'
이 -regex
옵션은 전체 경로와 일치하고 시작과 끝 모두에 고정되므로 끝이 아닌 시작 부분에 필요합니다 .*
.$
?
는확장하다정규식 연산자( 에서와 같이 grep -E
)는 이전 원자(여기)의 0 또는 1과 일치합니다 i
. 기본 정규 표현식에서는 사용할 수 없으므로 -E
BSD에서 해당 표현식이 필요합니다 find
. GNU find
(적어도 현재 버전에서는)에서 기본 정규식은 기본 정규식도 확장 정규식도 아니지만 일부 고대 버전의 emacs에서 나온 일부 정규식 변형입니다.?
예지원됩니다. 따라서 -regextype posix-extended
이 경우에는 필요하지 않습니다.
그러나 \{0,1\}
나중에 ERE와 동일하게 1이 BRE에 추가되었습니다.?