Сравнение даты создания фаилов архиве с системнои датои

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-16 9:57:57

помгоите прошу очень создать такои скрипт .
вообщем в чем суть , есть значит архив zip , который каждый день обновляется в нем есть два фаила

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

-rw-rw-rw-  2.0 fat   365904 b- defN 20100316.104514 1Cv77Chs.dat
-rw-rw-rw-  2.0 fat      147 b- defN 20100316.104514 1Cv77Dld.id
с помщью

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

 /usr/local/bin/zipinfo -T /slice/ftp/20.zip | grep id
я впринципе узнаю дату создания фаила 1Cv77Dld.id,
вот как мне очистить эту строку от ненужного и получить только дату , перенаправить полученное значение в какои то фаил , сравнить с датои и если фаил отличается от системнои даты то отправить уведомление на почту

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-16 10:33:48

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

#!/bin/sh
if [ `zipinfo -T /slice/ftp/20.zip | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
 then
  echo 'Какая-то мессага' |mail user@localhost
 fi
Сила ночи, сила дня - одинакова фигня!


Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-16 11:26:26

Может кто нить посоветует хорошую книженцию или ресурс по программрованию на баше

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-16 11:44:42

Shuba
а можно еще спросить вот я сравнил да вот если дата в порядке то тогда надо сделать проверку времни то есть с

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

zipinfo -T /slice/ftp/20.zip | grep id
-rw-rw-rw-  2.0 fat      147 b- defN 20100316.104514 1Cv77Dld.id
взять так же значение допустим 1045 и проверить разницу с системным временем и если допустим разница больше часа то тогда так же отправить уведомление

суть в том что у меня 20.zip должен меняться каждый час и вот елси прошел обвал то надо сразу сигнализировать

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-16 12:04:36

Ага, разжевать и в рот положить. Я тебя пнул в нужном направлении, дальше дерзай сам. Вообщем юзай:

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

man sh
man if
man date
man awk
Сила ночи, сила дня - одинакова фигня!

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-16 12:32:34

можо спросить хоть -ne что значит

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-16 16:46:20

KaiF писал(а):можо спросить хоть -ne что значит
Означает истинно, при неравенстве аргументов.
Т.е. если

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

`zipinfo -T /slice/ftp/20.zip | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'`
неравен

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

`date '+%Y%m%d'`
- посылаем мессагу по почте.
Сила ночи, сила дня - одинакова фигня!

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-16 17:43:48

правельно же ?

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

dataH="`date +%H%M%S`"
dataG="`date +%Y%m%d`"

if [ `zipinfo -T /slice/ftp/20.zip | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
then
echo 'Внимание !!! Нет обмена ' |mail test@test.kg
else
datahb=`zipinfo -T /slice/ftp/20.zip | grep id |awk '{ print $7 }'|awk -F '.' '{ print $2 }'`
datal=`expr $dataH - $datahb`
time="10000"
 if [ $datal -gt $time ]
   then echo 'Внимание !!! Нет обмена ' |mail test@test.kg
 else
echo 'Обмен в порядке' |mail -s all_right test@test.kg
fi
 fi

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-17 12:22:36

KaiF писал(а):правельно же ?
Ну вроде как да. Вообщем эксперементируй и проверяй.
Сила ночи, сила дня - одинакова фигня!

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-19 8:15:57

мож еще спросить вот я сделал чтоб проверялись все архивы в каталоге. как сделать что допустим есть некии фаил file.txt , в котором по очереди записанны названия фаилов. и нужно сравнивать список файлов с тем что есть в каталоге и если какого то файла нету- сигнализировать об этом. ну и плюс изменения

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

dataH="`date +%H%M%S`"
dataG="`date +%Y%m%d`"
cd /slice/ftp/obmen/
for filename in *.zip
do
if [ `/usr/local/bin/zipinfo -T /slice/ftp/obmen/$filename | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
then
echo "Внимание !!! файл $filename не обновлен" >> /slice/ftp/mail.txt
else
datahb=`/usr/local/bin/zipinfo -T /slice/ftp/obmen/$filename | grep id |awk '{ print $7 }'|awk -F '.' '{ print $2 }'`
datal=`expr $dataH - $datahb`
time="10000"
 if [ $datal -gt $time ]
 then
  echo "Внимание !!! файл $filename не обновлен" >> /slice/ftp/mail.txt
fi
 fi
 done
cat /slice/ftp/mail.txt | mail -s "Exchange status" root@test.kg
cat /dev/null > /slice/ftp/mail.txt

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-19 16:46:20

KaiF писал(а):как сделать что допустим есть некии фаил file.txt , в котором по очереди записанны названия фаилов. и нужно сравнивать список файлов с тем что есть в каталоге и если какого то файла нету- сигнализировать об этом. ну и плюс изменения

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

man diff
Данная команда позволяет сравнивать файлы построчно. Одно замечание к тебе: делай код более читабельным, тяжко видеть где у тебя начинаются и заканчиваются циклы и условные операторы

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

dataH="`date +%H%M%S`"
dataG="`date +%Y%m%d`"
cd /slice/ftp/obmen/
for filename in *.zip
do
  if [ `/usr/local/bin/zipinfo -T /slice/ftp/obmen/$filename | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
    then
      echo "Внимание !!! файл $filename не обновлен" >> /slice/ftp/mail.txt
    else
      datahb=`/usr/local/bin/zipinfo -T /slice/ftp/obmen/$filename | grep id |awk '{ print $7 }'|awk -F '.' '{ print $2 }'`
      datal=`expr $dataH - $datahb`
      time="10000"
      if [ $datal -gt $time ]
        then
          echo "Внимание !!! файл $filename не обновлен" >> /slice/ftp/mail.txt
        fi
    fi
done
cat /slice/ftp/mail.txt | mail -s "Exchange status" root@test.kg
cat /dev/null > /slice/ftp/mail.txt
Один минус твоего творчества виден сразу: тебе на мыло будут сыпаться письма (пусть и пустые) даже тогда, когда всё пашет без проблем
Сила ночи, сила дня - одинакова фигня!

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-20 14:03:43

что то мозг понять не может

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-25 10:49:44

намекните хоть как тут мона дифф использовать

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-25 11:02:14

можете сказать почемсу такая конструкция н работает

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

#!/bin/sh
dataH="`date +%H%M%S`"
dataG="`date +%Y%m%d`"

cd /slice/ftp/obmen/
files[0]=/slice/ftp/obmen/20.zip
files[1]=/slice/ftp/obmen/21.zip
COUNT=${#fils[@]}

for ((i = 0; i < COUNT; i++)); do
file="${files[$i]}"

for file in $ do

if [ `/usr/local/bin/zipinfo -T /slice/ftp/obmen/$file | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
then
echo "Внимание !!! файл $file не обновлен" >> /slice/ftp/mail.txt
else
datahb=`/usr/local/bin/zipinfo -T /slice/ftp/obmen/$file | grep id |awk '{ print $7 }'|awk -F '.' '{ print $2 }'`
datal=`expr $dataH - $datahb`
time="10000"
 if [ $datal -gt $time ]
 then
  echo "Внимание !!! файл $file не обновлен" >> /slice/ftp/mail.txt

fi
 fi
 done


cat /slice/ftp/mail.txt | mail -s "Exchange status" root@test.kg

cat /dev/null > /slice/ftp/mail.txt

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

./tet.sh
./tet.sh: files[0]=/slice/ftp/obmen/20.zip: not found
./tet.sh: files[1]=/slice/ftp/obmen/21.zip: not found
./tet.sh: 19: Syntax error: Bad for loop variable

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Shuba » 2010-03-25 14:32:21

KaiF писал(а):можете сказать почемсу такая конструкция н работает

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

./tet.sh
./tet.sh: files[0]=/slice/ftp/obmen/20.zip: not found
./tet.sh: files[1]=/slice/ftp/obmen/21.zip: not found
./tet.sh: 19: Syntax error: Bad for loop variable
Наверное потому, что в sh нет массивов
Сила ночи, сила дня - одинакова фигня!

Аватара пользователя
KaiF
мл. сержант
Сообщения: 133
Зарегистрирован: 2007-12-17 8:40:31
Откуда: Кыргызстан
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение KaiF » 2010-03-25 16:15:38

ок разобрался. прально ? как теперь проверять еще наличие фаила допустим фаил 20.zip если его не существует то уведомлять , ну и фаше замечание если пустое письмо то не отсылать? да и как можно проверить не битыи ли архив.
проверить наличие фаила можно через if [ -e $item ] , это уже сам нашел , вот с битым тяжко

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

#!/bin/bash
dataH="`date +%H%M%S`"
dataG="`date +%Y%m%d`"
cd /slice/ftp/obmen/

files[0]=20.zip
files[1]=21.zip
files[2]=40.zip
files[3]=41.zip
files[4]=AP20.zip
files[5]=AP21.zip
files[6]=BP1.zip
files[7]=GP10.zip
files[8]=JP11.zip
files[9]=KP10.zip
files[10]=OP11.zip
files[11]=AP10.zip
files[12]=FP10.zip
files[13]=GP11.zip
files[14]=JP20.zip
files[15]=KP11.zip
files[16]=UP0.zip
files[17]=AP11.zip
files[18]=BP0.zip
files[19]=FP11.zip
files[20]=JP10.zip
files[21]=JP21.zip
files[22]=OP10.zip
files[23]=UP1.zip

for item in "${files[@]}"
 do
   if [ `/usr/local/bin/zipinfo -T /slice/ftp/obmen/$item | grep id |awk '{ print $7 }'|awk -F '.' '{ print $1 }'` -ne `date '+%Y%m%d'` ]
     then
      echo "Внимание !!! файл $item не обновлен" >> /slice/ftp/mail.txt
   else
     datahb=`/usr/local/bin/zipinfo -T /slice/ftp/obmen/$item | grep id |awk '{ print $7 }'|awk -F '.' '{ print $2 }'`
     datal=`expr $dataH - $datahb`
     time="10000"
       if [ $datal -gt $time ]
        then
       echo "Внимание !!! файл $item не обновлен" >> /slice/ftp/mail.txt
fi
 fi
 done

cat /slice/ftp/mail.txt | mail -s "Exchange status" root@test.kg
cat /dev/null > /slice/ftp/mail.txt

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Dark_LemON » 2012-04-06 12:08:18

Не хотелось создавать параллельной темы...
Подскажите как сравнить два времени?
Т.е. как определить время которое выполнялся скрипт?
Думалось взять переменную с начальным временем и сравнить с переменной времени конца скрипта. Но как? Не хотелось конечно городить фигню и сравнивать отдельно час, минуту и секунды.
Подскажите, может есть что то простое и изящное?

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение kpp » 2012-04-06 13:09:42

Если нужно просто определить время выполнения скрипта, то можно скрипт запустить так:

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

time script.sh
По окончанию работы скрипта будет выведена информация:

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

real    0m18.521s
user    0m1.063s
sys     0m0.079s
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение Dark_LemON » 2012-04-06 14:08:58

Хорошо, если запускать такой скрипт кроном, то как можно снимать статистику запуска? стандартно переводить вывод в файл и глушить эхо в самом скрипте, как то не очень красиво. Если бы сам скрипт внутри себя считал разницу времени запуска и времени окончания, а потом кидал это в файлик (из которого потом можно построить графики).
Хотя с другой стороны это более расточительно с т.з. рессурсов.

Спасибо за ответ kpp, посмотрю как можно прикрутить этот способ.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Сравнение даты создания фаилов архиве с системнои датои

Непрочитанное сообщение kpp » 2012-04-06 14:28:28

Как и просили что-то простое и изящное.
Вариант 2.
В скрипте :

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

moment_begin=`date "+%s"`

# тело скрипта
# ............

moment_end=`date "+%s"`
# получить время выполения скрипта между moment_begin и moment_end в секундах
expr ${moment_end} - ${moment_begin}
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.