Массовое переименование файлов с помощью утилиты 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
Метки: , , , . Закладка Постоянная ссылка.

Комментарии запрещены.