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

У меня есть папка с большим количеством файлов в ней разных типов, то есть .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 когда вы довольны результатами.

  • Войдите в систему по ssh, выполните одну команду, и я не хочу покидать bash
  • Создание копий каталогов с помощью find
  • обрабатывать непрерывный вывод synclient
  • Почему `zip` в цикле for работает, когда файл существует, но не тогда, когда он этого не делает?
  • Как узнать все файлы на других машинах, используя сценарий оболочки bash?
  • Термин gnome - это тип оболочки без входа?
  • Команды X не начинаются с моей работы
  • Могу ли я настроить параметры отображения оболочки?
  • Отмена выхода и возврат в оболочку
  • Удалить файлы из списка, которые были созданы / изменены в субботу
  • Интерактивный диспетчер командной строки Shell vs X
  • Linux и Unix - лучшая ОС в мире.