проблемы с Grep (неправильно работает скрипт)

Модератор: Модераторы разделов

Filth
Сообщения: 1

проблемы с Grep

Сообщение 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
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: проблемы с Grep

Сообщение Red User »

Код: Выделить всё

echo a${loop}a | grep '^a.*'"$1"'a$' > /dev/null &&
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: проблемы с Grep

Сообщение sash-kan »

Filth, изобретение велосипедов, конечно, похвально. но иногда неэффективно. я, конечно, не спорю, что велосипед по имени rename — далеко не silver bullet, и даже не golden hammer, но с описанной задачей он бы справился.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: