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

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

  • Ключ удаления не работает должным образом в интерактивной оболочке PHP
  • Рекурсивно удалять файлы с idx> 10000
  • Как распечатать только первый матч с помощью grep
  • Внешние команды в AWK
  • Общие обозначения и стандарты флагов для сценариев и функций оболочки
  • Объединение команд строк и grep: как ограничить результаты строками с нулевым завершением
  • Как скрипт может выполнить себя через какой-то exec снова?
  • Предоставление некоторым пользователям только SSH и доступа к оболочке с ограниченным использованием ресурсов
  • Синтаксическая ошибка C Shell Script «неожиданный конец файла»
  • Почему эта команда Bash использует regex, не заменяя мои скобки?
  • Пустой файл без grep, впоследствии обрабатывающий его как двоичный файл
  • Функции Ksh включены в Zsh?
  • Linux и Unix - лучшая ОС в мире.