Переименование сотен файлов сразу для правильной сортировки

У меня есть тонна файлов, все имена, такие как 1.jpg, 2.jpg, 3.jpg и т. д. до 1439.jpg, однако у меня проблема с одним из моих проектов и алфавитом. Обычно это идет в порядке 1.jpg, 10.jpg, 11.jpg и т. Д.

Что мне нужно, так это назвать файлы так, чтобы они были в формате, таком как 00001.jpg вплоть до 01439.jpg.

Как я смогу сделать это быстро и эффективно?

1
задан 30 July 2014 в 20:00

5 ответов

for f in *.jpg ; do if [[ $f =~ [0-9]+\. ]] ; then  mv $f `printf "%.5d" "${f%.*}"`.jpg  ; fi ; done

Редактировать

Объяснение:

if [[ $f =~ [0-9]+\. ]] позволяет переименовывать только файлы, имена которых являются числами (за ними следует точка). printf "%.5d" NUMBER добавляет, что ведущие нули "${f%.*}" разрезают расширение (.jpg) и оставляют только число .jpg после того, как второй backtick добавляет расширение файла снова.

Обратите внимание, что это будет работать только с именами файлов, которые являются числами.

Если вы хотите поэкспериментировать, попробуйте эту команду:

for f in *.jpg ; do if [[ $f =~ [0-9]+\. ]] ; then echo mv $f `printf "%.5d" "${f%.*}"`.jpg  ; fi ; done

Изменить [ ! d10]

Сделал команду более безопасной, убедившись, что только имена файлов, которые являются числами, переименовываются. Обратите внимание, что все ранее существовавшие файлы с именем 00001.jpg будут перезаписаны.

20
ответ дан 24 May 2018 в 07:15

Ниже сценария python.

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

Объединение разных расширений в одно действие переименования может добавить некоторое удобство. Чтобы добавить расширения (ы), просто добавьте их в кортеж, например extensions = (".jpg", ".jpeg", ".tiff").

Скопируйте текст в пустой файл, сохраните его как rename.py, введите правильный путь в каталог файлов (sourcedir), количество цифр, которое вы хотели бы, чтобы новые имена имели (number_ofdigits) и расширение файла (ов) для переименования (extensions)

Запустить его командой :

python3 /path/to/script/rename.py

Сценарий:

#!/usr/bin/python3

import shutil
import os

sourcedir = "/path/to/files"; number_ofdigits = 5; extensions = (".jpg", ".jpeg")

files = os.listdir(sourcedir)
for item in files:
    if item.endswith(extensions):
        name = item.split("."); zeros = number_ofdigits-len(name[0])
        newname = str(zeros*"0")+name[0]+"."+name[1]
        shutil.move(sourcedir+"/"+item, sourcedir+"/"+newname)

edit:

Ниже немного улучшенной версии. Он автоматически определяет самое длинное имя в каталоге и добавляет ведущие нули до длины самого длинного имени.

пример:

1.jpg
12.jpg
123.jpg

становится:

Не нужно указывать количество цифр.

#!/usr/bin/python3

import shutil
import os

sourcedir = "/path/to/files"; extensions = (".jpg", ".jpeg")
files = [(f, f[f.rfind("."):], f[:f.rfind(".")]) for f in os.listdir(sourcedir)if f.endswith(extensions)]
maxlen = len(max([f[2] for f in files], key = len))

for item in files:
    zeros = maxlen-len(item[2])
    shutil.move(sourcedir+"/"+item[0], sourcedir+"/"+str(zeros*"0")+item[0])
6
ответ дан 24 May 2018 в 07:15

В Perl есть утилита переименования, которая делает это очень просто:

rename 's/\d+/sprintf("%05d",$&)/e' *.jpg

Первый аргумент - это выражение Perl, которое оценивается для каждого имени файла.

2
ответ дан 24 May 2018 в 07:15

Существует GUI, который будет делать это под названием pyRenamer, который можно найти в репозиториях. Установите, запустите, выберите свой каталог и просто установите «Переименованный шаблон имени файла» на «{num5}» на вкладке «Шаблоны» и нажмите кнопку «Переименовать». Вы также можете просмотреть, что произойдет до переименования.

0
ответ дан 24 May 2018 в 07:15
  • 1
    Хотя ваш ответ работает, обратите внимание, что это раздел shell-scripting, то есть я ищу ответ командной строки. Кроме того, можете ли вы предоставить более подробную информацию о программе? Например, какой формат шаблона {num5}? – Kaz Wolfe 29 June 2014 в 10:04
for file in `(find * -maxdepth 1 -type f -name "*.jpg")`     
do    
  mv $file "000"$file    
done

Это грубо, поскольку он не делает переименование разумно, нужно будет подумать об этом.

Update: Ну, у вас есть более полный ответ.

-4
ответ дан 24 May 2018 в 07:15
  • 1
    он переименовывает 1439.jpg как 0001439.jpg. – Avinash Raj 28 May 2014 в 10:28
  • 2
    Да, я знаю, просто добавили лишние нули, которые все равно должны работать с этим видом. – Swarnendu Biswas 28 May 2014 в 17:30

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

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