it-swarm-ko.tech

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

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

find . -name "*.jpg"  

그러나 결과에 png 파일을 어떻게 추가 할 수 있습니까?

143
wong2

다른 매개 변수 사이에 -o 플래그를 사용하십시오.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)은 매력처럼 작동합니다.

NOTE 괄호와 그 내용 사이에 공백이 있어야합니다 . 작동하지 않습니다.

설명:

  • -type f-파일 만 검색 (디렉토리 아님)
  • \( & \)--type f가 모든 인수에 적용되어야합니다.
  • -o-논리 OR 연산자
  • -iname--name와 유사하지만 대소 문자를 구분하지 않습니다.
176
Shadur

기준을 -oShadur에서 제안 함 으로 결합 할 수 있습니다. -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)'

이것은 더 정확합니다.

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

명확히하기 위해 Linux, Unix 및 macOS 버전에서 작동하는 유일한 옵션은 다음과 같습니다.

find -E . -regex '.*\.(jpg|png)'

OS X 버전이 약간 다르기 때문에 대부분의 플랫폼에서 잘 작동하는 것을 작성하는 것이 중요합니다.

9
sorin