Групповое переименование файлов в Linux

Иногда требуется навести порядок среди накачанных торрентов или просто прибраться в домашней директории, в виндах люди используют Windows Commander - двухпанельный файловый менеджер, в Linux нет особой необходимости в этом, переместить и переименовать пару файлов можно с помощью nautilus, а вот разобрать такое барахло как доктор хаус или прослушка вручную очень утомительно. Но можно воспользоваться утилитой rename, эта утилита предназначена для группового переименования файлов и её мощь заключается в привычных всем регулярных выражениях с синтаксисом поточного редактора sed

Например в директории имеются файлы

Доктор Хаус/s04$ ls

House.M.D.s04e01.rus.lostfilm.tv.ogv House.M.D.s04e02.rus.lostfilm.tv.ogv House.M.D.s04e03.rus.lostfilm.tv.ogv House.M.D.s04e04.rus.lostfilm.tv.ogv
House.M.D.s04e05.rus.lostfilm.tv.ogv House.M.D.s04e06.rus.lostfilm.tv.ogv House.M.D.s04e07.rus.lostfilm.tv.ogv House.M.D.s04e08.rus.lostfilm.tv.ogv
House.M.D.s04e09.rus.lostfilm.tv.ogv House.M.D.s04e10.rus.lostfilm.tv.ogv House.M.D.s04e11.rus.lostfilm.tv.ogv House.M.D.s04e12.rus.lostfilm.tv.ogv
House.M.D.s04e13.rus.[tfile.ru].ogg House.M.D.s04e14.rus.[tfile.ru].ogg House.M.D.s04e15.rus.[tfile.ru].ogg House.M.D.s04e16.rus.[tfile.ru].ogg

Задаём регулярное выражение подобное выражения sed, я хочу удалить всё начиная с суфикса rus и до конца строки, при этом заменить везде расширение на ogv, под эту задачу походит вот такое регулярное выражение

rename 's/rus.*/ogv/gi' House.M.D.s04e*
Доктор Хаус/s04$ ls
House.M.D.s04e01.ogv House.M.D.s04e04.ogv House.M.D.s04e07.ogv House.M.D.s04e10.ogv House.M.D.s04e13.ogv House.M.D.s04e16.ogv
House.M.D.s04e02.ogv House.M.D.s04e05.ogv House.M.D.s04e08.ogv House.M.D.s04e11.ogv House.M.D.s04e14.ogv
House.M.D.s04e03.ogv House.M.D.s04e06.ogv House.M.D.s04e09.ogv House.M.D.s04e12.ogv House.M.D.s04e15.ogv

Вот и всё, одна команда и сколько угодно файлов обработано

Утилита rename работает так, находит в имени файлов, а список файлов задаётся последним параметром, подстроку в заданном регулярном выражении, в моём случае

House.M.D.s04e16.rus.[tfile.ru].ogg House.M.D.s04e01.rus.lostfilm.tv.ogv

жирным выделена часть соответвующая выражению, а затем преобразует её к заданному виду, в моём случае заменяет её на подстроку ogv

Для примера часто требуется убрать символы подчёркивания из имён накачанных файлов, делается это так

rename 's/_/ /gi' *.avi *.ogv

По-моему всё просто, быстро и чётко

Файловый менеджер наутилус и просмотр превью фильмов в ogv

и что удивительно, по умолчанию Nautilus не имеет отображать превью фильмов в формате ogv (ogg умеет), но если имена файлов выглядят вот так, вот работает замечательно

Вот тут есть ещё примеры группового переименования файлов в Linux http://linsovet.com/mass-file-renaming

 

похожие страницы

  1. Пакетная обработка фотографий, обрезка, изменение размера и конвертирование группы изображений
  2. HOWTO: Как за 12 минут установить Linux, попробовать и удалить
  3. Автоматическая обработка файлов, часть два
  4. Сравнение производительности Linux, Windows и MacOS
  5. Создание игрушечного модуля ядра Linux

#1:

Да, сторонняя утилита для тривиальной задачи, да еще и с использованием sed.
Слабо сделать тоже самое, не прибегая к сторонней rename, а пользуясь bash (sh,tcsh) и sed?
А то я совершенно непонимаю, для кого мануалы по консоле пишутся.

Подсказка: Цикл for спасет отца русской демократии =)

ответить  2009-06-26 20:51:37 

#2:  Басманов:

во-первых ни какая она не сторонняя, а обычный perl скрипт
и какой смысл изобретать новый скрипт когда есть готовый

ответить  2009-06-26 21:10:37 

#3:

старанно, у меня в arch'e это не рабоатет
вы использовали ту rename которая из util-linux-ng ?

ответить  2009-06-26 21:25:01 

#4:  Басманов:

В Ubuntu и Debian это perl скрипт, с кем притянут пока не знаю

ответить  2009-06-26 21:28:02 

#5:

ага, нашел уже ;)
называется prename

ответить  2009-06-26 21:29:44 

#6:  Басманов:

он идёт в комплекте с пакетом perl

ответить  2009-06-26 21:32:47 

#7:

Да, сторонняя утилита для тривиальной задачи, да еще и с использованием sed.
Слабо сделать тоже самое, не прибегая к сторонней rename, а пользуясь bash (sh,tcsh) и sed?
А то я совершенно непонимаю, для кого мануалы по консоле пишутся.

Подсказка: Цикл for спасет отца русской демократии =)

for i in *; do [ а тут sed на $i и штатная mv ]; done

Дописать команду до конца?

ответить  2009-06-26 21:33:52 

#8:  Басманов:

re: Дописать команду до конца?
дописывай и не забудь про пробелы и экранирование символов

ответить  2009-06-26 21:35:18 

#9:

воткнул на бубунту 10.04 утилиту gprename - просто и понятно + гуи-интерфейс B)

ответить  2011-01-24 13:17:39 

#10:

Для примера часто требуется убрать символы подчёркивания из имён накачанных файлов
Упоролся чтоли?

ответить  2012-02-04 23:45:12 

#11:

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

ответить  2012-10-28 21:39:58 

#12:

#9: воткнул на бубунту 10.04 утилиту gprename - просто и понятно + гуи-интерфейс B)

зачёт! спасибо!

ответить  2013-01-31 19:54:43 

#13:  perlock:

Сторонняя?!
(ubuntu 14.04)
man rename:
...
AUTHOR
Larry Wall
...

ответить  2015-01-22 02:38:09