У меня есть около 12000 изображений разных типов файлов, но каждое из них было переименовано в * .jpg.
Теперь я хочу дать им их правильные расширения обратно, как я могу это сделать
files
file-format
akabhirav
источник
источник
Ответы:
Вы можете сделать это относительно легко в bash:
Это та же идея, что и в ответе @ AB, но вместо глобуса используются оболочки
find
. Это${f%%.*}
имя файла без его расширения. Команда-0
offile
заставляет печатать\0
после имени файла, которое мы затем используем дляgrep
типа файла. Это должно работать с произвольными именами файлов, включая те, которые содержат пробелы, переводы строки или что-либо еще. Это${type,,}
хитрость, чтобы получить расширения нижнего регистра. Это будет преобразованоPNG
вpng
.Вы не сказали в своем вопросе, но если вам нужно, чтобы это было рекурсивным и переходило в подкаталоги, вы можете использовать это вместо этого:
shopt -s globstar
Будет включить опцию globstar Баша, который позволяет**
матч подкаталогов:источник
**
переходить в подкаталоги.file
не всегда указывает расширение, которое кажется: оно превращает bash-файлfoo.bourne-again
сюда, например!Сценарий ниже может быть использован (рекурсивно) для переименования неправильно установленного расширения
.jpg
в правильное. Если он обнаружит нечитаемый файл, он сообщит об этом в выводе скрипта.Сценарий использовать
imghdr
модуль, чтобы распознавать следующие типы:rgb
,gif
,pbm
,pgm
,ppm
,tiff
,rast
,xbm
,jpeg
,bmp
,png
. Подробнее оimghdr
модуле здесь . Список может быть расширен за счет большего количества типов, как указано в ссылке.Как таковой, он специально переименовывает файлы с расширением
.jpg
, как указано в вопросе. С небольшим изменением можно переименовать любое расширение или определенный набор расширений в правильное (или без расширения, как здесь ).Сценарий:
Как пользоваться
rename.py
Запустите его командой:
источник
Примечание: мой подход кажется слишком сложным. Я бы предпочел, чтобы тердоны ответили на вашем месте.
Вы можете использовать команду
file
для определения типа файла:С этой информацией файлы могут быть переименованы:
Пожалуйста, сделайте тест, прежде чем применять команду к вашим изображениям
пример
источник
find -exec bash -c "..."
и делайте все там, либо используйте,while read -d '' name type
чтобы разделить имя файла иfile
вывод, а затем проанализировать,$type
чтобы получить тип файла. На самом деле не стоит, смотрите мой ответ о том, как сделать это намного проще в чистом (ish) bash.