Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: bash grep квадратные скобки в переменных.  (Прочитано 4669 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pam123

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Здравсвуйте все,

пытаюсь написать скриптик для автоматической конвертации своей видео коллекции.
На стадии отладки выглядит примерно так:
#!/bin/bash
r='report.txt'
find "./Загрузки" -regex '.*\(.avi\|.mpg\|.mpeg\|.flv\|.mp4\|.mov\|.mp4\|.wmv\).*' | while read i
do
date >> $r
echo $i >> $r
  if grep "$i" "$r" >> $r;
  then
  echo "$i is OK!" >> $r
  else
  #f=`printf $i | rev | cut -d '.' -f1 | rev`
  #mencoder $i -ovc xvid -oac mp3lame -xvidencopts bitrate=-700 -o "/home/111/tmp.avi"
  #mencoder -o "/home/111/tmp.avi" -oac copy -ovc copy '/home/111/converted'${i}
  fi 
#mv tmp $i.avi
done
#echo '<A HREF="'$o'" TARGET="_new">out: '$o'</A></P>' >> $r

Уперся в проблему: строка if grep "$i" "$r" >> $r;не срабатывет, если имя файла содержит квадратные скобки.
Пробовал (почти) все и ${i} и \'$i\' и другие варианты.
Видимо вопрос слишком простой, решения найти не могу.

Прошу помощи сообщества знатоков.

С уважением,
Павел

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash grep квадратные скобки в переменных.
« Ответ #1 : 10 Ноября 2009, 09:22:09 »
Видимо вопрос слишком простой, решения найти не могу.
Вопрос простой, если все делать по правилам
 и непростой, если использовать разделители (типа пробела) и зарезервированные символы из регулярных выражений в названиях файлов.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: bash grep квадратные скобки в переменных.
« Ответ #2 : 10 Ноября 2009, 11:05:07 »
Это должно помочь:

Цитата: man grep
GREP(1)                          User Commands                         GREP(1)

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern
...
   Matcher Selection
...
       -F, --fixed-strings
              Interpret PATTERN as a  list  of  fixed  strings,  separated  by
              newlines,  any  of  which is to be matched.  (-F is specified by
              POSIX.)

...

Оффлайн pam123

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: bash grep квадратные скобки в переменных.
« Ответ #3 : 10 Ноября 2009, 13:41:47 »
Видимо вопрос слишком простой, решения найти не могу.
Вопрос простой, если все делать по правилам
 и непростой, если использовать разделители (типа пробела) и зарезервированные символы из регулярных выражений в названиях файлов.

Все верно, но логическая цепочка такова:
- имена файлов придумываю не я, а те, кто их размещает на торрентах;
- переименовывать не могу, тк файлы активно раздаются;
- конвертирую для того что бы бытовой DVD мог проигрывать с флэшки, если один раз конвертировал, то второй раз не надо (для этого и проверяется - есть ли имя файла в тексте отчета).
- cron с моим скриптиком будет "поддерживать" на кухне кинозал  :).

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash grep квадратные скобки в переменных.
« Ответ #4 : 10 Ноября 2009, 13:49:55 »
- имена файлов придумываю не я, а те, кто их размещает на торрентах;
- переименовывать не могу, тк файлы активно раздаются;
Я понял "тех людей". Простенько и со вкусом защищаются. ;D

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: bash grep квадратные скобки в переменных.
« Ответ #5 : 10 Ноября 2009, 17:02:00 »
Так grep -F должно помочь!
В приведенной команде требуется найти имя файла $i в файле report.txt ($r), так?
Так оно фиксированное, это имя, разве нет?
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн pam123

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
В приведенной команде требуется найти имя файла $i в файле report.txt ($r), так?
Так оно фиксированное, это имя, разве нет?

все верно.

Заработало так:
#!/bin/bash
r='./report.txt'
find "./Загрузки" -regex '.*\(.avi\|.mpg\|.mpeg\|.flv\|.mp4\|.mov\|.mp4\|.wmv\).*' | while read i
do
  if grep -F "$i" "$r" >> /dev/null;
  then
   echo "$i allready converted"
  else
   echo "$i" >> $r
   #mencoder $i -ovc xvid -oac mp3lame -xvidencopts bitrate=-700 -o "./tmp.avi"
   #mencoder -o "./tmp.avi" -oac copy -ovc copy './converted' ${i}
  fi 
#mv tmp $i.avi
done

2 Mam(O)n: Спасибо
2 wl: В очередной раз спасибо.

С уважением,
Павел

 

Страница сгенерирована за 0.041 секунд. Запросов: 25.