Как переименовать неназванные файлы с соответствующими расширениями?

У меня есть папка с большим количеством файлов в ней разных типов, то есть .pdf , .jpg , .png , .tiff и т. Д., Но все они называются с расширением .JPG . Как я могу переименовать все из них с их оригинальными расширениями? т.е. pdf to pdf , tiff to tiff и т. д.

Я могу найти тип файла:

file 99.jpg 99.jpg: PDF document, version 1.3 

Есть ли какой-нибудь скрипт или программа, с которой я могу это сделать?

2 Solutions collect form web for “Как переименовать неназванные файлы с соответствующими расширениями?”

  1. Создавайте команды, не запуская их.

    Используйте mimetype для генерации списка командных строк, который впоследствии будет изменен командой замены GNU sed :

     cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's#\.[^./"]*/\([^./]*"\)$#\.\1#' 
  2. Если некоторые из расширений файлов выглядят немного mime -ish (т.е. .jpeg вместо .jpg и т. Д.), То добавьте столько команд s сколько необходимо между sed ' и s , например:

     sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#' 
  3. Как только результат будет выглядеть хорошо, запустите его с помощью опции оценки GNU sed . (Просто положите e до финала ' .) Таким образом, все это может выглядеть так:

     cd ~/messed/up/folder/ # go where the files are... mimetype -M --output-format 'mv "%f" "%f%m"' *.JPG | sed 's/jpeg"$/jpg"/;s#\.[^./"]*/\([^./]*"\)$#\.\1#e' ls # show results 

Вы можете использовать тип MIME, найденный по file :

 #! /usr/bin/env bash for f in ./*.JPG; do type=$(file -bi "$f") type=${type%%;*} base=${f%.*} final= case "$type" in application/pdf) final="$base".pdf ;; image/png) final="$base".png ;; image/tiff) final="$base".tiff ;; esac if [ "$final" ]; then printf '%s --> %s\n' "$f" "$final" # mv -f "$f" "$final" fi done 

Добавьте больше типов к case если вам нужно (но не оставляйте image/jpeg , поскольку файлы JPEG уже имеют правильное расширение). Просмотрите изменения, затем раскомментируйте строку mv когда вы довольны результатами.

  • Создание каталога с пробелом в имени
  • Как безопасно загружать файлы в сценарии оболочки?
  • Как добавить язык во FreeBSD?
  • IO и другие команды оболочки, когда программа не запускается терминалом
  • Как программно отключить пользователя ssh?
  • Сценарий оболочки с циклом for и "array"
  • Почему я не могу запустить команду как пользователь, имеющий / bin / false в качестве оболочки входа?
  • Шестнадцатеричная проверка последовательности чисел в Linux?
  • grep для переменной
  • Уникальные линии, основанные на первом поле
  • Как закодировать строку значений с помощью ',' и напечатать ее как список
  • Interesting Posts

    Добавить строку в блок текста, увеличивая значение из предыдущей строки

    Завершение установки Debian

    Как постоянно выполнять резервное копирование файлов журнала?

    Bash: Каково использование типа (встроенные Bash)?

    Сценарий не возвращается при выполнении через SSH

    Директива chroot в sshd_config не позволяет исключить пользователей

    Ubuntu, установленный из mini-ISO под VirtualBox, не загружается

    «Недействительное целевое устройство загрузчика» при установке Fedora с помощью anaconda

    Как запустить собственный скрипт в качестве заставки в Openbox?

    Удалите 2 и 3 строки в текстовом файле, но не 1

    Как отформатировать 1GB USB-накопитель на FAT32 с 512-байтным сектором?

    Почему bash расширяет историю / восклицательный знак, когда между одинарными кавычками

    Простой способ надежно подключить 2 машины через Ethernet-кабель?

    Catdoc xls2csv конвертирует только один лист

    pfsense long ping для google

    Linux и Unix - лучшая ОС в мире.