명령줄을 사용하여 아래 루트 디렉터리의 JPEG 파일만 나열하려면 어떻게 해야 합니까?

명령줄을 사용하여 아래 루트 디렉터리의 JPEG 파일만 나열하려면 어떻게 해야 합니까?

JPEG 파일만 찾는 방법을 찾고 있는데/Linux에 대한 지식이 부족하여 다음과 같은 방법을 생각해 냈습니다.

  1. 루트 디렉터리에 존재하는 모든 경로를 아래에 나열하십시오.find /
  2. 결과를 다음 명령으로 파이프하고 file발견된 각 경로에서 해당 명령을 실행합니다.xargs file
  3. 명령의 결과에는 fileJPEG 문자열이 포함되어 있으므로 IF 문이 어떻게든 JPEG만 필터링할 수 있을 것이라고 생각했습니다. If (JPEG는 파일 명령의 출력에 포함되어 있습니다) {파일의 인수 표시}

다시:

find / | xargs file | "If statement" 

제 말을 정정해 주시거나 작업 수행 방법에 대한 힌트를 주시거나 해결책을 제공해 주시겠습니까?

답변1

파일 이름의 확장자에 관계없이 JPEG 이미지가 포함된 파일을 나열하려면 find+를 사용하여 fileMIME 유형의 파일을 나열 할 수 있습니다 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필요한 이유는 명령을 실행하면 /콘솔을 복잡하게 만드는 많은 "권한 거부" 오류가 발생하기 때문입니다.

관련 정보