Страница 1 из 1

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

Добавлено: 2010-03-16 9:57:57
KaiF
помгоите прошу очень создать такои скрипт .
вообщем в чем суть , есть значит архив 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,
вот как мне очистить эту строку от ненужного и получить только дату , перенаправить полученное значение в какои то фаил , сравнить с датои и если фаил отличается от системнои даты то отправить уведомление на почту

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

Добавлено: 2010-03-16 10:33:48
Shuba

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

#!/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

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

Добавлено: 2010-03-16 11:05:35
KaiF
спасибо огромное

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

Добавлено: 2010-03-16 11:26:26
KaiF
Может кто нить посоветует хорошую книженцию или ресурс по программрованию на баше

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

Добавлено: 2010-03-16 11:44:42
KaiF
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 должен меняться каждый час и вот елси прошел обвал то надо сразу сигнализировать

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

Добавлено: 2010-03-16 12:04:36
Shuba
Ага, разжевать и в рот положить. Я тебя пнул в нужном направлении, дальше дерзай сам. Вообщем юзай:

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

man sh
man if
man date
man awk

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

Добавлено: 2010-03-16 12:32:34
KaiF
можо спросить хоть -ne что значит

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

Добавлено: 2010-03-16 16:46:20
Shuba
KaiF писал(а):можо спросить хоть -ne что значит
Означает истинно, при неравенстве аргументов.
Т.е. если

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

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

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

`date '+%Y%m%d'`
- посылаем мессагу по почте.

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

Добавлено: 2010-03-16 17:43:48
KaiF
правельно же ?

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

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

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

Добавлено: 2010-03-17 12:22:36
Shuba
KaiF писал(а):правельно же ?
Ну вроде как да. Вообщем эксперементируй и проверяй.

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

Добавлено: 2010-03-19 8:15:57
KaiF
мож еще спросить вот я сделал чтоб проверялись все архивы в каталоге. как сделать что допустим есть некии фаил 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

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

Добавлено: 2010-03-19 16:46:20
Shuba
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
Один минус твоего творчества виден сразу: тебе на мыло будут сыпаться письма (пусть и пустые) даже тогда, когда всё пашет без проблем

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

Добавлено: 2010-03-20 14:03:43
KaiF
что то мозг понять не может

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

Добавлено: 2010-03-25 10:49:44
KaiF
намекните хоть как тут мона дифф использовать

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

Добавлено: 2010-03-25 11:02:14
KaiF
можете сказать почемсу такая конструкция н работает

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

#!/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

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

Добавлено: 2010-03-25 14:32:21
Shuba
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 нет массивов

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

Добавлено: 2010-03-25 16:15:38
KaiF
ок разобрался. прально ? как теперь проверять еще наличие фаила допустим фаил 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

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

Добавлено: 2012-04-06 12:08:18
Dark_LemON
Не хотелось создавать параллельной темы...
Подскажите как сравнить два времени?
Т.е. как определить время которое выполнялся скрипт?
Думалось взять переменную с начальным временем и сравнить с переменной времени конца скрипта. Но как? Не хотелось конечно городить фигню и сравнивать отдельно час, минуту и секунды.
Подскажите, может есть что то простое и изящное?

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

Добавлено: 2012-04-06 13:09:42
kpp
Если нужно просто определить время выполнения скрипта, то можно скрипт запустить так:

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

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

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

real    0m18.521s
user    0m1.063s
sys     0m0.079s

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

Добавлено: 2012-04-06 14:08:58
Dark_LemON
Хорошо, если запускать такой скрипт кроном, то как можно снимать статистику запуска? стандартно переводить вывод в файл и глушить эхо в самом скрипте, как то не очень красиво. Если бы сам скрипт внутри себя считал разницу времени запуска и времени окончания, а потом кидал это в файлик (из которого потом можно построить графики).
Хотя с другой стороны это более расточительно с т.з. рессурсов.

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

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

Добавлено: 2012-04-06 14:28:28
kpp
Как и просили что-то простое и изящное.
Вариант 2.
В скрипте :

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

moment_begin=`date "+%s"`

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

moment_end=`date "+%s"`
# получить время выполения скрипта между moment_begin и moment_end в секундах
expr ${moment_end} - ${moment_begin}

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

Добавлено: 2012-04-06 14:33:23
Dark_LemON
О! Огромное спасибо! Это то что нужно!