F
Filth
Ставится задача переименовать все файлы в каталоге с указанным суффиксом путем добавления указанного префикса. Суффикс и префикс передаются в командной строке при вызове скрипта. Скрипт вел себя нормально, до тех пор пока не стал тестировать его на файлах в именах которых содержались пробелы в начале имени файла. Проблемы удалось решить переместив команду ls в другое место (см. код ниже). Теперь неадекватно ведет себя grep выбирая и переименовывая даже файлы в кот. нет указанного суффикса. Пусть мой скрипт называется scr.sh и в каталоге имеются следующие файлы: " abc d " , " abcd" , " d ". Запускаю скрипт ./scr.sh " d " " 123 ". Как я понимаю grep должен отобрать только 1 - й и 3 - й файлы, а файл "abcd" переименовывать не должен. Если у кого есть идеи как подправить мой корявый код буду очень благодарен.
Код:
#!/bin/bash
# Переименование всех файлов с указанным суффиксом путем добавления
# к ним заданного префикса.
if [ $# -eq 0 ]; then
echo "Вы не ввели ни суффикс, ни префикс"
elif [ $# -eq 1 -a "$1" != "?" ]; then
echo "Вы ввели только суффикс и не ввели префикс"
elif [ $# -eq 2 ]; then
echo "Переименование файлов с указанным суффиксом "
elif [ $# -gt 2 ]; then
echo "Неправильное количество аргументов"
fi
if [ "$1" = "?" ]; then
echo "Формат ввода: $0 суффикс префикс"
fi
counter=0
if [ $# -eq 2 ]; then
#for loop in `ls | grep $1 `
for loop in *
do
echo $loop | grep "$1" > /dev/null &&
{
counter=`expr $counter + 1 `
echo "Переименовывается $loop в $2$loop "
mv "$loop" $2"$loop"
}
done
case $counter in
0)
echo "Файлов с заданным суффиксом нет!!!"
;;
*)
echo "Переименовали $counter файлов "
;;
esac
fi