среда, 27 августа 2008 г.

Массовое переименование файлов с помощью утилиты find

Propheta: Массовое переименование файлов с помощью утилиты find

Иногда бывает жизненно необходимо переименовать кучу файлов. Например заменить пробелы в названии файлов и директорий на нижний знак подчеркивания.
Сохраняем приведенный ниже скрипт в файл с именем mass-replace.sh

#!/bin/sh

# Определяем глубину вложенности директорий
depth=$((`find "$1" -type d -print | \
sed -E 's/[^\/]+//g' | \
sort | tail -n 1 | \
wc -c`+1));
# Макрос, переименовывающий файлы и директории
replacer='new="`dirname "{}"`/`basename "{}" | sed "s/ /_/g"`"; if [ "$new" != "{}" ]; then mv "{}" "$new"; fi;';
# Обходим все уровни вложенности
while [ $depth -ge 0 ];
do
# Находим и заменяем
find "$1" -depth $depth -and -name '* *' -print -exec sh -c "$replacer" \;
# Меняем уровень вложенности
depth=$(($depth-1));
done;
Сделаем файл исполняемым
$ chmod +x mass-replace.sh
В качестве аргумента скрипту передается путь до обрабатываемой директории
$ ./mass-replace.sh ~/Warez/Music

Автор Князь на 11:15

2 комментария:

vovans комментирует...

Спасибо, помогло!

Только не от пробела надо было избавиться ))

Анонимный комментирует...

Мне не помогло

slava@Mustang:~/Script$ ./Probel_tire.sh
find: невозможно искать `': Нет такого файла или каталога
find: все пути должны предшествовать выражению: 1
Использование: find [-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [путь...] [выражение]
find: все пути должны предшествовать выражению: 0
Использование: find [-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [путь...] [выражение]
slava@Mustang:~/Script$