find 명령을 사용하여 여러 확장자를 검색하는 방법

find 명령을 사용하여 여러 확장자를 검색하는 방법

jpg다음을 사용하여 모든 이미지를 얻을 수 있습니다 .

find . -name "*.jpg"  

png하지만 결과에 파일을 어떻게 추가합니까 ?

답변1

-o다양한 매개변수 사이에 플래그를 사용하세요.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)기적적으로 작동합니다.

노트거기~ 해야 하다대괄호와 내용 사이에 공백이 있어야 합니다. 그렇지 않으면 작동하지 않습니다.

설명하다:

  • -type f- 파일만 검색(디렉토리 제외)
  • \(& \)- -type f모든 매개변수에 적용 해야 합니다.
  • -o- 논리 OR 연산자
  • -iname- 유사 -name하지만 일치 여부는 대소문자를 구분하지 않습니다.

답변2

-o조건문을 as와 결합 할 수 있습니다 .샤둘이 제안함. 연결보다 우선순위가 낮 으므로 -o괄호가 필요할 수 있습니다.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( -name '*.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)'

답변3

이것이 더 정확합니다:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'

답변4

파일만 필요한 경우:

find ./ -type f -regex '.*\.\(jpg\|png\)$'

예를 들어, "blah.jpg"라는 디렉터리와 일치하지 않습니다.

관련 정보