find 명령을 사용하여 확장자가있는 모든 파일을 목록에서 찾는 방법은 무엇입니까?


179

디렉토리 (gif, png, jpg, jpeg)에서 모든 이미지 파일을 찾아야합니다.

find /path/to/ -name "*.jpg" > log

.jpg 파일뿐만 아니라이 문자열을 수정하는 방법?

답변:



138
find /path/to/  \( -iname '*.gif' -o -iname '*.jpg' \) -print0

작동합니다. 더 우아한 방법이있을 수 있습니다.


16
-iname 사례를 구분 것
크리스 Koston

1
@ Gerald : OR 표현식을 이스케이프 괄호로 묶어야 할 수도 있습니다. find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;그렇지 않으면 exec는 마지막 부분 ( -iname '*.jpg' 이 경우) 에만 적용됩니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

그것은 중요한 말입니다. find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0jpg 파일 만 인쇄합니다! 여기에 괄호가 필요합니다.find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
Anne van Rossum

28

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

이렇게 -E하면 정규식에서 파 렌스와 파이프를 피할 필요가 없습니다.


2
내 발견은 이것을 가지고 있지 않습니다 -E
wieczorek1990

1
-E옵션은 find"확장 정규 표현식"을 사용하도록 지시 합니다. 다른 여러 도구에도 비슷한 옵션이 있지만이 옵션이 모든 UNIX 배포판에서 사용 가능한지 확실하지 않습니다.
tboyce12

8
Mac OS에서도 작동합니다.
c.gutierrez

2
@ tboyce12 우분투에서 작업하면서 정규 표현식을 단순화하기 위해 -regextype을 지정할 수 있습니다 find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)".
doub1ejack

1
@cjm 아마도 find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log. -iregex플래그를 사용하면 find대소 문자를 구분하지 않습니다.
tboyce12

11
find /path/to/ -type f -print0 | xargs -0 file | grep -i image

file명령을 사용하면 파일 이름 (또는 확장자)에 관계없이 파일 형식을 인식하려고합니다.

경우 /path/to또는 파일 이름이 문자열을 포함 image하고 위의 가짜 안타를 반환 할 수 있습니다. 이 경우 제안하겠습니다

cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/

죄송합니다, 거기에 클릭이 잘못되었으므로 downvote을 취소 할 수 없습니다 ... :(
Mark Simpson

6
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)

2
name / iname 매개 변수에 (이스케이프 된) 괄호를 추가 한 이유를 설명해 주시겠습니까?
Bart Kleijngeld

불일치에 대한 이유가 있습니까? -iname *.jpg, -o -name *.jpeg, -o -iname *gif모두는 약간 다른 형식을 가지고있다.
버려진 카트

다른 답변과의 차이점을 적어도 설명 할 수 있다면.
el-teedee 19

6

위의 @Dennis Williamson의 답변에 추가하여, 동일한 정규 표현식이 파일 확장자에 대소 문자를 구분하지 않게하려면 -iregex를 사용하십시오.

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log

5

Mac OS에서

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"


-1

파일에 확장자가없는 경우 파일 MIME 유형을 찾을 수 있습니다

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'

여기서 (audio | video | matroska | mpeg)는 MIME 유형 정규식입니다.

& 삭제하려는 경우 :

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

또는 확장자 이외의 모든 것을 삭제하십시오.

find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
  rm "$f"
done

~ 대신에 ~!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.