Массовое переименование файлов в Linux.

Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст.

Offtop. Переименовать один файл в Linux: mv имя-файла1 имя-файла2

Итак, допустим у нас есть несколько файлов:

myapp.conf
myapp.txt
myapp.sh
whatis.sh

Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:

Rename

Утилита rename входит в стандартную поставку Debian, так что начнем с нее.

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

-v отобразить имена успешно переименованных файлов.

-n отобразить список файлов, которые будут переименованы, без переименования в итерации.

-f перезаписать уже существующие файлы.

perlexpr — шаблон для переименования.

Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:

1
rename 's/.sh/.sh.bak/g' *.sh

Рассмотрим perlexr подробнее:

s=указывает, что требуется замещение.

/.sh/=Строка, которую будем замещать.

/.sh.bak/ = строка, на которую будем замещать

g=global, будем замещать все найденные вхождения.

С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:

1
rename ‘y/a-z/A-Z/’ *

MMV

mmv — программа для массового перемещения, переименования, копирования, объединения файлов.

По умолчанию она не включена в состав Debian. Поставим ее:

1
sudo apt-get install mmv

Наша задача решается одной строкой:

1
mmv \*.sh \#1.sh.bak

MV

Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.

1
2
3
for i in *.sh; 
do mv $i `basename $i sh`sh.bak; 
done

Попробуем усложить задачу. Например у нас есть куча файлов JPG:

1234234.jpg
e456567657.jpg
234df34.jpg
…

Мы хотим привести их к следующему виду:

file1.jpg
file2.jpg
file3.jpg
…

Пример скрипта:

1
2
3
4
5
j=0;
for i in *.jpg;
do let j+=1;
mv $i file$j.jpg ;
done

Midnight Commander

В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.

  1. Через + выбираем файлы по маске *.sh

  2. Нажимаем F6 и в destination указываем *.sh.bak

Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.

На этом все, спасибо за внимание.

BSD  Linux  Mac 

Смотрите также

comments powered by Disqus