이름이 잘못된 파일의 이름을 적절한 확장자로 바꾸는 방법은 무엇입니까?

이름이 잘못된 파일의 이름을 적절한 확장자로 바꾸는 방법은 무엇입니까?

다양한 유형의 파일이 많이 들어 있는 폴더가 있습니다..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/jpeg, JPEG 파일에는 이미 올바른 확장자가 있으므로 는 제외). 변경 사항을 검토한 후 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
    

관련 정보