Назад | Перейти на главную страницу

perl + рекурсивное переименование файлов и каталогов

Может быть, у кого-то есть скрипт инструмента (perl или скрипт оболочки), который переименовывает имена файлов или имена каталогов?

Например

Инструмент должен прочитать из файла следующее:

   more file

   /var         Local      exportlocal
   /etc        data         Data
  1. Первое поле $ 1 - имя каталога для поиска в этом каталоге

  2. Второе поле - имя файла / каталога, в котором нужно искать

  3. Третье поле - имя нового файла / каталога, который нужно переименовать

Реальный пример (до запуска инструмента)

    /var/tmp/Local

Реальный пример (после запуска инструмента)

    /var/tmp/exportlocal

Предполагая, что файл разделен пробелами (табуляции и / или пробелы между полями и новой строкой, заканчивающейся каждой записью) и что имена файлов и каталогов не содержат этих символов:

#!/bin/sh
while read -r branch oldname newname
do
    find "$branch" -depth -name "$oldname" -exec sh -c 'mv "$1" "${1%/*}/$2"' _  {} "$newname" \;
done < file-with-names

Редактировать:

Изменить find для вывода сообщения для каждого переименованного файла:

    find "$branch" -depth -name "$oldname" -exec sh -c 'mv "$1" "${1%/*}/$2"; echo "$1 was renamed to $2 under $3"' _  {} "$newname" "$branch" \;