Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [Bash script] Следилка за изменением на СИ  (Прочитано 34412 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« : 16-02-2013 22:25 » 

Подсел я на несколько книг, которые авторы выкладывают в СамИздате (СИ) по главам. Все время мониторить вручную, что то стало лениво. По быстрому написал простенький Bash скрипт, может кому либо тоже пригодится.
В файле link.txt нужно записать URL всех страниц, которые нужно мониторить. Файл хранится в одном каталоге со скриптом. В процессе работы создается файлы index.txt и index.tmp в том же каталоге. Для корректной работы, index.txt не стирать.
Код: (Bash)
#!/bin/bash

ABSOLUTE_FILENAME=`readlink -e "$0"`
DIRECTORY=`dirname "$ABSOLUTE_FILENAME"`
cd $DIRECTORY

TEMP=`mktemp`
FILELINK="link.txt"
FILEINDEXTEMP="index.tmp"
FILEINDEX="index.txt"

FOREACH=`cat $FILELINK`

if [ -f $FILEINDEXTEMP ]; then
   rm $FILEINDEXTEMP
fi


for i in $FOREACH
   do
   wget -q $i -O $TEMP
   LENGHT=`stat --format=%s $TEMP`
   echo "$i $LENGHT">> $FILEINDEXTEMP
   STRING=`cat $FILEINDEX| grep "$i"`
   OLDLENNGHT=`echo $STRING|cut -d' ' -f2`
   if [ -z $OLDLENNGHT ]; then
      OLDLENNGHT=0;
   fi
   if (( $OLDLENNGHT!=$LENGHT )); then
       echo "$i is changed. Old size is $OLDLENNGHT. New size is $LENGHT"
   fi
done
mv $FILEINDEXTEMP $FILEINDEX
rm $TEMP
cd - >>/dev/null
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-02-2013 00:00 » new

Несколько замечаний/предложений:

* Переменная может содержать произвольную последовательность и при интерполяции лучше заключить ее в кавычки.
Тут тоже:

Цитата
Код: (Bash)
if [ -z $OLDLENNGHT ]

* Вместо `` можно использовать $(), что немного лучше читается.

* Там где интерполяция не нужна, следует использовать одинарные кавычки.
Пример:

Цитата
Код: (Bash)
FILELINK="link.txt"

* Надо «форсить»:

Цитата
Код: (Bash)
rm $FILEINDEXTEMP

* Можно в одну строку:

Цитата
Код: (Bash)
   if [ -z $OLDLENNGHT ]; then
      OLDLENNGHT=0;
   fi
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines