JPEG 파일만 찾는 방법을 찾고 있는데/Linux에 대한 지식이 부족하여 다음과 같은 방법을 생각해 냈습니다.
- 루트 디렉터리에 존재하는 모든 경로를 아래에 나열하십시오.
find /
- 결과를 다음 명령으로 파이프하고
file
발견된 각 경로에서 해당 명령을 실행합니다.xargs file
- 명령의 결과에는
file
JPEG 문자열이 포함되어 있으므로 IF 문이 어떻게든 JPEG만 필터링할 수 있을 것이라고 생각했습니다. If (JPEG는 파일 명령의 출력에 포함되어 있습니다) {파일의 인수 표시}
다시:
find / | xargs file | "If statement"
제 말을 정정해 주시거나 작업 수행 방법에 대한 힌트를 주시거나 해결책을 제공해 주시겠습니까?
답변1
파일 이름의 확장자에 관계없이 JPEG 이미지가 포함된 파일을 나열하려면 find
+를 사용하여 file
MIME 유형의 파일을 나열 할 수 있습니다 image/jpeg
.
find . -type f -exec sh -c '
file --mime-type "$0" | grep -q image/jpeg\$ && printf "$0\n"
' {} \;
또는
find . -type f -exec sh -c '
mt=$(file --brief --mime-type "$0")
[ -z "${mt#image/jpeg}" ] && printf "$0\n"
' {} \;
답변2
먼저, .jpg
다음 파일 확장자를 가진 파일을 인쇄할 수 있습니다.
sudo find / -name *.jpg -print
어떻게 작동하는지 확인하고 적절하게 수정한 다음 원하는 경우 출력을 인쇄하는 대신 출력을 다른 함수로 파이프할 수 있습니다. 예를 들어 다음도 허용하려는 경우 .JPG
:
sudo find / -iname "*.jpg"
답변3
MIME 유형이 있는 모든 파일의 경로가 인쇄됩니다.사진/jpeg.
find / -type f -exec file --no-pad --mime-type {} + 2>/dev/null \
| awk '$NF == "image/jpeg" {$NF=""; sub(": $", ""); print}'
참고할 몇 가지 사항이 있습니다.
- 한 번만 호출하는
-exec command {} +
대신 사용하세요 (파일당 한 번 호출하는 대신).-exec command {} \;
file
- 일관된 출력 형식을
--no-pad
보장하려면 (분석을 더 쉽게 하기 위해) 이 옵션을 사용하십시오.file
2>/dev/null
의 stderr을 억제하는 데find
필요한 이유는 명령을 실행하면/
콘솔을 복잡하게 만드는 많은 "권한 거부" 오류가 발생하기 때문입니다.