Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст. Итак, допустим у нас есть несколько файлов:
1 2 3 4 |
myapp.conf myapp.txt myapp.sh whatis.sh |
Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:
Offtop. Переименовать один файл в Linux:
mv имя-файла1 имя-файла2
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 можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:
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:
1 2 3 4 |
1234234.jpg e456567657.jpg 234df34.jpg … |
Мы хотим привести их к следующему виду:
1 2 3 4 |
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, если стоят соответствующие утилиты.
На этом все, спасибо за внимание.