답변:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
작동합니다. 더 우아한 방법이있을 수 있습니다.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
그렇지 않으면 exec는 마지막 부분 ( -iname '*.jpg'
이 경우) 에만 적용됩니다 .
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
jpg 파일 만 인쇄합니다! 여기에 괄호가 필요합니다.find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
이렇게 -E
하면 정규식에서 파 렌스와 파이프를 피할 필요가 없습니다.
-E
옵션은 find
"확장 정규 표현식"을 사용하도록 지시 합니다. 다른 여러 도구에도 비슷한 옵션이 있지만이 옵션이 모든 UNIX 배포판에서 사용 가능한지 확실하지 않습니다.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. -iregex
플래그를 사용하면 find
대소 문자를 구분하지 않습니다.
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/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
-iname *.jpg
, -o -name *.jpeg
, -o -iname *gif
모두는 약간 다른 형식을 가지고있다.
파일에 확장자가없는 경우 파일 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
~ 대신에 ~!