확장자가 제공되지 않는 웹사이트에서 여러 이미지를 다운로드할 계획이므로 파일의 내용이나 MIME 유형을 기반으로 이미지를 추가하고 싶습니다.
file <filename>
파일 형식을 식별하는 데는 큰 도움이 되지만 확장자가 필요합니다.
--extension
Print a slash-separated list of valid extensions for the file type found.
이것은 의 file
매뉴얼 페이지에 있지만 작동하지 않는 것 같습니다.
$ file --extension test_text_file.txt
test_text_file.txt: ???
$ file --extension test_png_file.png
test_png_file.png: ???
$ file --extension test_gif_file.gif
test_gif_file.gif: ???
???
문자 그대로 내가 전달한 모든 파일에 대해 인쇄합니다. 심지어 이미 적절한 확장명이 있는 파일도 인쇄합니다 . 이들 모두는 해당 유형의 유효한 파일 file
이며 --extension
.
이 기능이 작동하지 않는 이유는 무엇 file --extension
이며 파일 확장자를 얻으려면 무엇을 사용할 수 있습니까?
아이디어는 file --mime-type
알려진 MIME 유형을 해당 확장에 매핑하는 디스패치 테이블 배열을 사용하고 생성하는 것이지만 더 간단하고 안전한 솔루션을 선호합니다.
답변1
왜
file --extension
나에게 효과가 없습니까?
당신뿐만 아니라. 보다이 질문. 거기 댓글 중 하나가 맞는 것 같습니다.
어쩌면 아주 아주 불완전한 기능일까요?
변환을 수행하는 표준 Unix 도구를 찾지 못했기 때문에 어쨌든 귀하의 아이디어가 가장 쉬운 솔루션일 수 있습니다.
아이디어는
file --mime-type
알려진 MIME 유형을 해당 확장에 매핑하는 디스패치 테이블 배열을 사용하고 생성하는 것이지만 더 간단하고 안전한 솔루션을 선호합니다.
그러한 지도가 존재한다는 점에 유의하세요 /etc/mime.types
. 보다Unix 및 Linux SE에 대한 또 다른 질문입니다.. 답변 중 하나를 바탕으로 다음 기능을 생각해 냈습니다.
function getext() {
[ "$#" != 1 ] && { echo "Wrong number of arguments. Provide exactly one." >&2; return 254; }
[ -r "$1" ] || { echo "Not a file, nonexistent or unreadable." >&2; return 1; }
grep "^$(file -b --mime-type "$1")"$'\t' /etc/mime.types |
awk -F '\t+' '{print $2}'
}
용법:
getext test_text_file.txt # it takes just one argument
필요에 맞게 조정하고 스크립트 등으로 만드십시오. 주요 관심사는 다음과 같습니다.
- 성공하면(종료 상태
0
) 출력은 비어 있지 않거나 비어 있을 수 있습니다(심지어\n
). - 일부 MIME 유형은 두 개 이상의 확장자를 반환합니다. 최대 하나를 얻는 데 사용할 수 있지만
cut -d ' ' -f 1
원하는 것이 아닐 수도 있습니다. 따라서 대신 사용자 정의 지도 파일이
/etc/mime.types
유용할 수 있습니다. 이 명령은 현재 디렉터리(및 하위 디렉터리)에 어떤 MIME 유형이 있는지 표시합니다.find . -type f -exec file -b --mime-type {} + | sort | uniq
grep
두 번 이상 일치하면 안 됩니다(적어도 와 함께/etc/mime.types
).^
(줄 시작) 및$'\t'
(탭)은 부분 일치를 피하기 위해 존재합니다.grep -m 1 ...
(또는 그 이후)를 사용하면head -n 1
최대 한 줄만 얻을 수 있습니다.
답변2
제 생각에 언급할 가치가 있는 것은 몇 가지 파일 형식에 대한 확장자를 표시한다는 것입니다.
file --preserve-date --special-files --extension *
결과:
BMP_file: ???
CPP_file: ???
FIFO_file: ERROR: (null)
GZ_file: ???
HAR_file: ???
H_file: ???
HTML_file: ???
JAR_file: zip/cbz
JAVA_CLASS_file: ???
JAVA_JAVA_file: ???
JPG_file: jpeg/jpg/jpe/jfif
MKV_file: ???
MP3_file: ???
MP4_file: ???
ODT_file: ???
PDF_file: ???
PNG_file: ???
PPS_file: ???
SHELL_SCRIPT_file: ???
SO_file: ???
TIFF_file: ???
TMP_file_GBQcW: ???
XML_file: ???
ZIP_file: zip/cbz