Как переименовать расширение файла в нижний регистр?

Я знаю, что этот вопрос задавался (и отвечался) раньше, но, похоже, моя ситуация уникальна, потому что у меня не может быть никакого решения для работы.

Запуск, мне нужно переименовать все мои фотографии из *.JPG в *.jpg,

Допустим, мне не нужен рекурсив, просто все картинки в одной папке.

Проблема, с которой я сталкиваюсь, такова:

mv: ‘P1010521.JPG’ and ‘p1010521.jpg’ are the same file

Та же проблема с переименованием, с такой командой:

rename 's/\.JPG$/.jpg/' *.JPG
P1020558.JPG not renamed: P1020558.jpg already exists

3 ответа

Это действительно просто:

  1. Переименуйте в другое значение, отличное от другого

    rename 's/\.JPG$/\.jpgaux/' *.JPG
    
  2. Теперь переименуйте что-то еще в .jpg обратно, но на этот раз строчными

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

Демо: http://paste.ubuntu.com/8853245/

Источник: Как изменить расширение нескольких файлов из командной строки? Благодаря Chakra!

Очень просто с mmv:

sudo apt install mmv

mmv \*.JPEG \#1.jpeg

Если KasiyA прав в своем комментарии, и я думаю, что это так, проблема OP в том, что файл с таким же именем уже существует. Если это так, сценарий должен будет проверить, существует ли уже целевое имя файла (в нижнем регистре), и (только), если это так, переименовать исходный файл дополнительно (не только в нижнем регистре), чтобы предотвратить ошибку имени, например

image1.JPG

в

renamed_image1.jpg

поскольку image1.jpg вызовет ошибку

Если это так, решение Python для переименования может быть:

#!/usr/bin/env python3

import os
import shutil
import sys

directory = sys.argv[1]
for file in [f for f in os.listdir(directory) if f.endswith(".JPG")]:
        newname = file[:file.rfind(".")]+".jpg"
        if os.path.exists(directory+"/"+newname):
                newname = "renamed_"+newname
        shutil.move(directory+"/"+file, directory+"/"+newname)

Скрипт переименовывает:

image1.JPG -> image1.jpg

но если image1.jpg уже существует:

image1.JPG -> renamed_image1.jpg

Как пользоваться

Скопируйте скрипт в пустой файл, сохраните его как rename.py, сделайте его исполняемым и запустите его командой:

<script> <directory_of_files>

Это работает лучше всего, я думаю, так как Perl поддерживает запуск кода в регулярном выражении

rename -n 's/(\.[A-Z]+$)/lc($1)/ge' *.*[A-Z]*

удалить -n на самом деле переименовать файлы

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