Переименование нескольких файлов с помощью make

Чтобы заменить пробелы в названиях файлов, я использовал возможности команды make, создав Makefile следующего содержания:

WAVRENAMEFILES = `ls -1 *.wav | echo "*.wav"`

MP3RENAMEFILES = `ls -1 *.mp3 | echo "*.mp3"`

MP3FILES = $(patsubst %.wav,%.mp3,$(wildcard *.wav))

all: $(MP3FILES)

%.mp3: %.wav

lame -b 128 --cbr -q 0 -m s $< $@

clean:

rm -f $(MP3FILES)

m3u:

ls *.mp3 >made.m3u

rename-wav:

for fn in $(WAVRENAMEFILES) ; do if [ "$$fn" != "$${fn// /_}" ] ; then echo "Renaming $$fn to $${fn// /_}" ; mv "$$fn" ./$${fn// /_} ; fi ; done

rename-mp3:

for fn in $(MP3RENAMEFILES) ; do if [ "$$fn" != "$${fn// /_}" ] ; then echo "Renaming $$fn to $${fn// /_}" ; mv "$$fn" ./$${fn// /_} ; fi ; done

Этот Makefile я использую для кодирования wav-файлов в mp3, а также для переименования wav и mp3 файлов. Для этого я копирую его в папку с файлами, открываю эмулятор терминала и использую следующие команды:

  • чтобы кодировать wav в mp3:

$ make

  • чтобы заменить пробелы на символы_подчёркивания в wav-файлах:

$ make rename-wav

  • чтобы заменить пробелы на символы_подчёркивания в wav-файлах:

$ make rename-mp3

  • чтобы создать список воспроизведения:

$ make m3u

  • чтобы удалить mp3-файлы:

$ make clean

Эдакий несколько левонарезной способ, конечно, но работает. Секрет успеха этого рецепта в том, что имена файлов перед тем, как попасть на обработку for, заключаются в кавычки. Более технологично было бы делать переименование, используя awk, но этот Makefile я изначально сделал для того, чтобы удобно кодировать в mp3 альбомы с Audio CD для прослушивания в MP3-плеере.