Групповое переименование файлов в 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 


оставить комментарий