Пакетное переименование & mdash; несколько типов изображений

Office 2007 работает над вином, 2010 год должен также работать ...

Cs4 работает, даже Cs5 ...

Игра с вином (с или без playonlinux), кроссовер, cedega или двойная загрузка могут помочь вам сыграть в ваши игры ...

Вино более чем прилично со старыми играми и программным обеспечением, ретро-геймеры счастливы, потому что многие игры не работают на windows xp и 7, но они могут легко их воспроизводить на linux ...

Родные игры в Linux лучше, но некоторые игры лучше работают на вине, чем на окнах, это больше вопрос выбора и время, используемое для настройки ваших игр на Linux. ..

1
задан 21 October 2014 в 00:47

2 ответа

Однострочный с помощью команды rename:

rename 's/.*/use File::MimeInfo::Magic qw#mimetype extensions#; sprintf("%s.%s", $&, extensions(mimetype($&)))/e' * -vn

использует модуль Perl File::MimeInfo для запроса файла (как это делает команда file) для разработки что этот файл есть, а затем добавить первое расширение MimeInfo для этого типа MIME обратно в файл.

В некоторых случаях это может привести к использованию менее широко используемых расширений (например, jpeg или jpe для большинства люди будут называть файлы jpg), но вы можете сделать второй проход, чтобы исправить их довольно легко:

rename 's/\.jpe$/.jpg/' *

Но большинство приложений не будут возражать, если вы укажете файлы .jpe, чтобы это не было необходимо большинству время

Обе команды rename выше установлены в тестовом режиме. Они ничего не сделают, пока вы не удалите аргумент -n с конца.

2
ответ дан 24 May 2018 в 02:42
  • 1
    e (модификатор) в последствии помогает выполнить код, который присутствует в заменяемой части. – Avinash Raj 20 October 2014 в 16:40
  • 2
    Yup, как правило, s/a/b/ буквально заменит a на b, но здесь он оценивает заменяемую сторону, позволяя вам делать подобные вещи. – Oli♦ 20 October 2014 в 16:42
  • 3
    но он уже заменяет файл с уже имеющимся расширением. Это foo.png становится foo.png.png – Avinash Raj 20 October 2014 в 17:50

Простой скрипт

#!/bin/bash

for file in ~/path/to/images/*; do
    TYPE=$(file --mime-type -b "$file" | cut -f2 -d/);
    if [[ ! $file =~ \.$TYPE ]]; then
        echo mv -v "$file" "$file.$TYPE";
    fi
done

Объяснение TYPE=$(file --mime-type -b "$file" | cut -f2 -d/); (поиск типа файла)

находит расширение каждого $file с помощью команды file (определить тип файла) .

--mime-type, --mime-encoding опция, используемая для печати только указанного элемента.

-b, --brief вариант, используемый для того, чтобы не добавлять имена файлов в выходные строки (короткий режим). См. Также man-файл для получения дополнительной информации.

Теперь мы извлекли тип файла и сохранили его в переменной TYPE.

man file Используется для печати просто тип расширения, Как png в image/png, выводит результат file --mime-type -b "$file".

-f2 печатает вторую часть с разделителем / (-d) между полями. ex: напечатайте png в image/png. См. Также man file для получения дополнительной информации.

Объяснение if [[...]]; (проверка расширения файла)

Мы пропустили все существующие расширения с простым регулярным выражением, используя оператор =~ внутри теста [[...]] в условии, если условие:

if [[ $file =~ \.$TYPE ]];

Пока $file - это ваши имена файлов изображений, а $TYPE - его расширение, которое мы нашли и сохранили в TYPE переменная в TYPE=$(file --mime-type -b "$file" | cut -f2 -d/);.

Затем мы перейдем к переименованию всех файлов, которые имеют расширение с собой.

! ссылаются на: если файл не имеет расширения расширения с самим собой, тогда переименуйте это и добавьте его расширение в конце его имени.

Объяснение echo mv -v "$file" "$file.$TYPE"; (шаг переименования)

В этой строке На самом деле мы добавляем расширение файла (если $file не является расширением с самим собой) в конце файла $file с помощью команды mv. mv также используется для переименования Files / Directory.

Затем мы переименуем $file в $file.$TYPE. Например, файл 1 будет переименован в 1.png, если его тип файла был png.

in theory actually above mv command do this: rename filename -> filename.filetype

Это имя файла, сохраненное в переменной $file, и тип файла, сохраненный в переменной $TYPE.

Как вы можете использовать этот скрипт?

Скопируйте и вставьте скрипт в gedit и сохраните его с вашим любимым именем ex: batchRename, затем откройте терминал и запустите его следующую команду:

bash batchRename

НЕ забывайте, прежде чем запускать скрипт, проверьте правильный путь к изображению /path/to/images/ и переименуйте свои файлы после проверки результата с помощью команды echo, удалите echo из начало echo mv -v "$file" "$file.$TYPE" и снова запустить сценарий и наслаждаться переименованием;)

1
ответ дан 24 May 2018 в 02:42
  • 1
    Привет KasiyA, позаботьтесь; он "исправляет" my .jpeg в .jpeg.JPEG. почему бы не пропустить все существующие расширения? – Jacob Vlijm 20 October 2014 в 21:17
  • 2
    @JacobVlijm Я обновил, включая пропустить все существующие расширения и объяснения для каждой строки. спасибо – αғsнιη 21 October 2014 в 18:07
  • 3
    Кстати, я не был человеком, который был ниспослан. – Jacob Vlijm 21 October 2014 в 18:14
  • 4
    @JacobVlijm Нет проблем +1;) – αғsнιη 21 October 2014 в 18:14
  • 5
    Ах, я вижу, он действительно упоминал только jpg, gif и png. – Jacob Vlijm 21 October 2014 в 18:32

Другие вопросы по тегам:

Похожие вопросы: