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}"