Grep работает не совсем так как я задумывал...

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Filth
Сообщения: 2
Зарегистрирован: 15 май 2007, 21:53

Ставится задача переименовать все файлы в каталоге с указанным суффиксом путем добавления указанного префикса. Суффикс и префикс передаются в командной строке при вызове скрипта. Скрипт вел себя нормально, до тех пор пока не стал тестировать его на файлах в именах которых содержались пробелы в начале имени файла. Проблемы удалось решить переместив команду 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
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

[syntax="bash"]#!/bin/bash

for myfile in *"$1"
do
mv "$myfile" "$2$myfile"
done
[/syntax]
Ответить