MIME 유형이 주어지면 해당 파일 확장자를 가져옵니다.

MIME 유형이 주어지면 해당 파일 확장자를 가져옵니다.

curl적절한 확장자를 가진 임시 디렉토리 에 파일을 다운로드하고 싶습니다 .

현재 나는 다음과 같은 작업을 수행합니다.

tmp="$(mktemp -t 'curl')"
curl -o "$tmp" http://example.com/generate_image.php?id=44
file -b --mime-type "$tmp"

그러면 다운로드한 파일의 MIME 유형이 인쇄됩니다. 하지만 확장명에 어떻게 매핑합니까?

보시다시피 URL의 "확장자"를 추출할 수는 .php없습니다 .png.

MIME 유형과 파일 확장자 사이에 일대일 매핑이 없다는 것을 알고 있지만 일반 파일 확장자를 처리해야 합니다.

답변1

Windows와 달리 Unix는 일반적으로 그렇지 않습니다 file extensions. 그러나 이 /etc/mime.types파일을 사용하여 다음과 같은 번역을 제공할 수 있습니다.

image/jpeg: jpg
image/gif: gif
image/png: png
image/x-portable-pixmap: ppm
image/tiff: tif

그런 다음 확장명으로 일치시킵니다.

$ ext=$(grep "$(file -b --mime-type file.png)" /etc/mime.types | awk '{print $2}')

$ echo $ext
png

답변2

Bash 스크립트는 하나의 인수(파일 이름)를 취하고 file 명령과 시스템 mime.types 파일을 사용하여 MIME 유형에 따라 이름을 바꾸려고 시도합니다.

#!/bin/bash

# Set the location of your mime-types file here.  On some OS X installations,
# you may find such a file at /etc/apache2/mime.types; On some linux distros, 
# it can be found at /etc/mime.types
MIMETYPE_FILE="/etc/apache2/mime.types"

THIS_SCRIPT=`basename "$0"`
TARGET_FILE="$1"
TARGET_FILE_BASE=$(basename "$TARGET_FILE")
TARGET_FILE_EXTENSION="${TARGET_FILE_BASE##*.}"
if [[ "$TARGET_FILE_BASE" == "$TARGET_FILE_EXTENSION" ]]; then
    # This fixes the case where the target file has no extension
    TARGET_FILE_EXTENSION=''
fi
TARGET_FILE_NAME="${TARGET_FILE_BASE%.*}"


if [ ! -f "$MIMETYPE_FILE" ]; then
    echo Could not find the mime.types file.  Please set the MIMETYPE_FILE variable in this script.
    exit 1
fi

if [ "$TARGET_FILE" == "" ]; then
    echo "No file name given. Usage: ${THIS_SCRIPT} <filename>"
    exit 2
fi

if [ ! -f "$TARGET_FILE" ]; then
    echo "Could not find specified file, $TARGET_FILE"
    exit 3
fi

MIME=`file -b --mime-type $TARGET_FILE`
if [[ "${MIME}" == "" ]]; then
    echo ${THIS_SCRIPT} $TARGET_FILE - Could not find MIME-type.
    exit 4
fi

EXT=$(grep "${MIME}" "${MIMETYPE_FILE}" | sed '/^#/ d' | grep -m 1 "${MIME}" | awk '{print $2}')

if [[ "$EXT" == "" ]]; then
    echo ${THIS_SCRIPT} ${TARGET_FILE} - Could not find extension for MIME-Type ${MIME}
    exit 5
fi


if [ "${TARGET_FILE_EXTENSION}" == "${EXT}" ]; then
    echo ${TARGET_FILE} already has extension appropriate for MIME-Type ${MIME}
    exit 0
fi

echo Renaming "${TARGET_FILE}" to "${TARGET_FILE}.${EXT}"
mv "${TARGET_FILE}" "${TARGET_FILE}.${EXT}"

관련 정보