답변:
-o
다른 매개 변수 사이 에 플래그를 사용하십시오 .
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
매력처럼 작동합니다.
참고 브래킷과 내용물 사이에 공백 이 있어야합니다 . 그렇지 않으면 작동하지 않습니다.
설명:
type -f
-파일 만 검색 (디렉토리 아님)\(
- type -f
모든 주장에 적용하기 위해 필요-o
-논리 OR 연산자-iname
-같지만 -name
대소 문자를 구분하지 않습니다.type -f
, 확장하고 괄호없이 두 표현식에 적용, 그래서하지 않습니다 find ./ -type f -iname \*.jpg -o -type f -iname \*.png
그것은 더 이상 :-) 두 글자 비록 ... 또한 작동
a * b + c
다르다a * (b + c)
당신과 기준을 결합 할 수 있습니다 -o
로 Shadur에 의해 제안 . 즉 참고 -o
괄호가 필요할 수 있으므로, 병렬보다 낮은 우선 순위를가집니다.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
Linux에서는 -regex
확장을 더 깔끔한 방식으로 결합 하는 데 사용할 수 있습니다 . 기본 정규 표현식 구문은 Emacs입니다 ( 기본 정규 표현식 및 \|
대체 와 같은 몇 가지 확장 ). 확장 정규 표현식 으로 전환하는 옵션이 있습니다 .
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
FreeBSD, NetBSD 및 OSX에서는 확장 정규 표현식 -regex
과 함께 사용할 수 있습니다 -E
.
find -E . -regex '.*\.(jpg|png)'
-iname
대신 -name
당신은 또한 캡처 - image.JPG
및image.PnG
이것은 더 정확합니다.
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregex
일치 jpg
뿐만 아니라 같은 것 같아요 JPG Jpg jpG
. 나는 $
필요하지 않다고 생각합니다 .
find -E . -iregex '.*\.(jpg|png|gif)'
@sorin의 답변에 표시된 것처럼 대신 사용해야합니다 .
명확하게하기 위해 Linux, Unix 및 macOS 버전에서 작동하는 유일한 옵션은 다음과 같습니다.
find -E . -regex '.*\.(jpg|png)'
OS X 버전이 약간 다르기 때문에 대부분의 플랫폼에서 잘 작동하는 것을 작성하는 것이 중요합니다.
-type f \( -iname \*.png -o -iname \*.jpg\)
OSX에서 작동하지 않는 부분은 무엇입니까?
find -name
여러 패턴과 일치하는 패턴