Пример A-3. rn: Очень простая утилита для переименования файлов

Пример A-3. rn: Очень простая утилита для переименования файлов

Этот сценарий является модификацией Пример 12-18.

  1. #! /bin/bash
  2. #
  3. # Очень простая утилита для переименования файлов
  4. #
  5. #  Утилита "ren", автор Vladimir Lanin (<a href="mailto:lanin@csd2.nyu.edu">lanin@csd2.nyu.edu</a>),
  6. #+ выполняет эти же действия много лучше.
  7. ARGS=2
  8. E_BADARGS=65
  9. ONE=1                     # Единственное или множественное число (см. ниже).
  10. if [ $# -ne "$ARGS" ]
  11. then
  12.   echo "Порядок использования: `basename $0` старый_шаблон новый_шаблон"
  13.   # Например: "rn gif jpg", поменяет расширения всех файлов в текущем каталоге с gif на jpg.
  14.   exit $E_BADARGS
  15. fi
  16. number=0                  # Количество переименованных файлов.
  17. for filename in *$1*      # Проход по списку файлов в текущем каталоге.
  18. do
  19.    if [ -f "$filename" ]
  20.    then
  21.      fname=`basename $filename`            # Удалить путь к файлу из имени.
  22.      n=`echo $fname | sed -e "s/$1/$2/"`   # Поменять старое имя на новое.
  23.      mv $fname $n                          # Переименовать.
  24.      let "number += 1"
  25.    fi
  26. done
  27. if [ "$number" -eq "$ONE" ]                # Соблюдение правил грамматики.
  28. then
  29.  echo "$number файл переименован."
  30. else
  31.  echo "Переименовано файлов: $number."
  32. fi
  33. exit 0
  34. # Упражнения:
  35. # ----------
  36. # С какими типами файлов этот сценарий не будет работать?
  37. # Как это исправить?
  38. #
  39. #  Переделайте сценарий таким образом, чтобы он мог обрабатывать все файлы в каталоге,
  40. #+ в именах которых содержатся пробелы, заменяя пробелы символом подчеркивания.