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

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

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

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

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

  • Сохранить вывод -exec в текстовый файл
  • Как фильтровать массив строк в ksh
  • Форматирование вывода: Подчеркивание
  • Есть ли версия команды «Найти», которая сохраняет свое состояние?
  • Объединение двух файлов и уникальное в новом файле
  • Сценарий оболочки для изменения оболочки пользователя
  • Предоставление некоторым пользователям только SSH и доступа к оболочке с ограниченным использованием ресурсов
  • Проверьте связанные имена файлов и удалите один из них
  • 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 когда вы довольны результатами.

    Interesting Posts

    Почему файловая система ext4 может быть сжата только тогда, когда она не установлена?

    Извлечь X количество минут из текущего времени из файла журнала

    Ошибка при создании и установке расширения memcached php

    Распечатайте количество значений, в которых есть специальные символы

    Может ли Mac установить установочный компакт-диск Debian?

    CHROOT: невозможно скопировать файлы в папку с изолированными пользователями с локальной машины с помощью WINSCP

    Установите Cython с python3 в Docker

    Есть ли способ получить то, что произошло в определенное время

    рекомендации по монтажу и разминированию акций

    Разрешение файла с помощью setuid и октал 4000

    Перенаправление трафика IPv6 на VPN-интерфейс

    Различное ядро ​​в DomU, чем в Dom0 на xen

    Печать частоты числа столбцов в строках в текстовом файле

    используя awk для создания нового файла, приводит к проблемам с использованием одного конкретного столбца, не может понять, что не так

    Как настроить псевдонимы шрифтов на уровне операционной системы

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