Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 302


exit 0

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

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

#! /bin/bash # # Очень простая утилита для переименования файлов # # Утилита "ren", автор Vladimir Lanin (lanin@csd2.nyu.edu), #+ выполняет эти же действия много лучше.

ARGS=2 E_BADARGS=65 ONE=1 # Единственное или множественное число (см. ниже).

if [ $# -ne "$ARGS" ] then echo "Порядок использования: `basename $0` старый_шаблон новый_шаблон" # Например: "rn gif jpg", поменяет расширения всех файлов в текущем каталоге с gif на jpg. exit $E_BADARGS fi

number=0 # Количество переименованных файлов.

for filename in *$1* # Проход по списку файлов в текущем каталоге. do if [ -f "$filename" ] then fname=`basename $filename` # Удалить путь к файлу из имени. n=`echo $fname | sed -e "s/$1/$2/"` # Поменять старое имя на новое. mv $fname $n # Переименовать. let "number += 1" fi done

if [ "$number" -eq "$ONE" ] # Соблюдение правил грамматики. then echo "$number файл переименован." else echo "Переименовано файлов: $number." fi

exit 0

# Упражнения: # ---------- # С какими типами файлов этот сценарий не будет работать? # Как это исправить? # # Переделайте сценарий таким образом, чтобы он мог обрабатывать все файлы в каталоге, #+ в именах которых содержатся пробелы, заменяя пробелы символом подчеркивания.

Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы

Это даже более простая версия предыдущего примера.

#! /bin/bash # blank-rename.sh # # Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге.

ONE=1 # единственное или множественное число (см. ниже). number=0 # Количество переименованных файлов. FOUND=0 # Код завершения в случае успеха.

for filename in * # Перебор всех файлов в текущем каталоге. do echo "$filename" | grep -q " " # Проверить -- содержит ли имя файла if [ $? -eq $FOUND ] #+ пробелы.


Содержание  Назад  Вперед