잘못된 파일의 이름을 적절한 확장자로 바꾸려면 어떻게 해야 합니까?

잘못된 파일의 이름을 적절한 확장자로 바꾸려면 어떻게 해야 합니까?

다양한 유형의 파일이 많이 포함된 폴더가 있습니다..pdf,.jpg,.png,.사소한 말다툼등이지만 모두 확장자로 명명되었습니다..JPG. 원래 확장자로 이름을 바꾸려면 어떻게 해야 합니까? 즉PDF도착하다PDF,사소한 말다툼도착하다사소한 말다툼등.

다음을 통해 파일 형식을 찾을 수 있습니다.

file 99.jpg
99.jpg: PDF document, version 1.3

이 작업을 수행하는 데 사용할 수 있는 스크립트나 프로그램이 있습니까?

답변1

다음을 통해 찾은 MIME 유형을 사용할 수 있습니다 file.

#! /usr/bin/env bash
for f in ./*.JPG; do
    type=$(file -bi "$f")
    type=${type%%;*}
    base=${f%.*}
    final=
    case "$type" in
        application/pdf) final="$base".pdf ;;
        image/png)       final="$base".png ;;
        image/tiff)      final="$base".tiff ;;
    esac
    if [ "$final" ]; then
        printf '%s --> %s\n' "$f" "$final"
        # mv -f "$f" "$final"
    fi
done

case필요한 경우 더 많은 유형을 추가할 수 있습니다(단, image/jpegJPEG 파일에 이미 올바른 확장자가 있으므로 생략됨). 변경 사항을 확인하고 mv결과에 만족하면 해당 줄의 주석 처리를 제거하십시오.

답변2

  1. 빌드 명령아니요실행하세요.

    mimetype명령 문자열 목록을 생성한 다음 다음을 통해 조정하는 데 사용됩니다 .암소 비슷한 일종의 영양 sed~의바꾸다 s주문하다:

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
       sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  2. 일부 파일 확장자가 조금 너무 보이는 경우몸짓 광대극-ish, (예: 등 대신) 그런 다음 .jpeg및 사이에 .jpg원하는 수의 명령을 추가합니다 s. 예를 들면 다음과 같습니다.sed 's

    sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#'
    
  3. 출력이 좋아지면 다음을 사용할 수 있습니다.암소 비슷한 일종의 영양 sed~의 평가하다 e옵션. ( e마지막 항목 앞에 하나만 추가 하면 됩니다 '.) 전체 내용은 다음과 같습니다.

    cd ~/messed/up/folder/  # go where the files are...
    mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG |
        sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#e'
    ls  # show results
    

관련 정보