Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разные вопросы > Как переименовать файлы по маске?


Автор: nikki4 27.9.2012, 12:23
Есть файлы пдф под название 1,2,3,4,5....
нужно изменить их название на имя файла*2-1. т.е. 1,3,5,7,9,11.
как это сделать? скачал ренеймер, но чето там не пойму как делать.. мож еще прога какая есть и как это сделать?

Автор: Данкинг 27.9.2012, 12:41
Не думаю, что стандартные переименовалки могут такие узкоспециализированные задачи делать. Так что если только самому прогу писать.

Автор: rsm 27.9.2012, 17:43
Задача не так проста, как может показаться на первый взгляд. Нюанс в том, что нумерацию нужно начинать в обратном порядке, т.е. от большего к меньшему: 5 => 3 => 1. В противном случае будут потери данных, т.к. уже переименованные файлы наложатся на существующие:
1 => 1
2 => 3
3 => 5 # файла 3 уже нет, он затёрт предыдущим
Значит, сначала нужно узнать количество файлов. Накидал на скорую руку однострочник:

Код

n=`ls [0-9]*.[pP][dD][fF] | wc -l`; n=$((n*2-1)); ls -vr [0-9]*.[pP][dD][fF] | while read file; do name="$n.pdf"; n=$((n-2)); [ "$file" = "$name" ] || mv -vi "$file" "$name"; done

Он примитивный, но основную идею демонстрирует.

Автор: Cheloveck 27.9.2012, 20:19
Несколько строк на питоне. Так как задача одноразовая, то указанная rsm проблема обходится просто двойным проходом.
Код

import os

os.chdir("files")
names = os.listdir(".")
for name in names:
    os.rename(name, "tmp_" + str(int(name[:name.find('.')]) * 2 - 1))

names = os.listdir(".")
for name in names:
    os.rename(name, name[4:] + ".pdf")

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)