понедельник, 6 июля 2009 г.

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

#!/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;

Комментариев нет:

Отправить комментарий