Я планирую загрузить кучу изображений с веб-сайта, которые не имеют расширения, поэтому я хочу добавить его на основе содержимого файла или 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-типы на их расширения, но я бы предпочел иметь более простое и безопасное решение.
источник
file
с ним????
для каждого файла.file-5.33
Ответы:
Не только для тебя. Смотрите этот вопрос . Один из комментариев там кажется правильным:
Я не нашел ни одного стандартного инструмента Unix для конвертации, так что ваша идея в любом случае может оказаться самым простым решением.
Обратите внимание, такая карта существует
/etc/mime.types
. Посмотрите этот другой вопрос по Unix & Linux SE . На основе одного из ответов я придумал следующую функцию:Использование:
Приспособьте это к своим потребностям, сделайте это сценарием и т. Д. Основные проблемы:
0
), выход может быть не пустым или не пустым (даже не\n
).cut -d ' ' -f 1
чтобы получить максимум один, но это может быть не тот, который вы хотите.Так что пользовательский файл карты вместо
/etc/mime.types
может быть полезен. Эта команда покажет вам, какие MIME-типы существуют в текущем каталоге (и подкаталогах):grep
не должен совпадать более одного раза (хотя бы с/etc/mime.types
);^
(начало строки) и$'\t'
(вкладка), чтобы избежать частичного соответствия. Используйтеgrep -m 1 ...
(илиhead -n 1
позже), чтобы убедиться, что вы получите не более одной строки.источник
/etc/mime.types
, это прекрасно работает для меня.