[bash]Выцепить нужные данные

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

rydj
Сообщения: 27

[bash]Выцепить нужные данные

Сообщение rydj »

Всем доброго времени суток. снова нужен совет опытных людей.
У меня такая задача: Есть заданная директория, и заданное время
Скрипт должен рекурсивно пройтись по заданной директории найти файлы или директории созданные после заданной даты, причем если таких файлов нет надо бить тревогу. Ступор вот в том что я не знаю как мне подцепить время и дату для проверки.
Не знаю на сколько я хорошим способом пошел но вот код:

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

#!/bin/bash
DIR=/n/ # Директория для анализа
MM=10 #задаем месяц
DD=25 #дату
#Time
HH=10
MM=00
#Проще говоря скрипт должен найти файлы которые созданы или менялись 25.10.2013 с 10:00 и после
#Пошел от простого для начала хотя бы найти сегодняшние файлы появившиеся после 10 часов
find $DIR -mtime 0 |while read STR # отфильтрую файлы изм. за последние 24ч.
do
R=$(ls  "$STR" -lah  |grep $DD |awk '{if ( $7 ~ /'$DD'/){print}}' |awk '{sub(":.*","",$8);print}' |awk '{print $8}') #Тут я пытался извлечь часы из вывода ls -lah
if [[ "$R" -ge "$HH"  ]]; then # если дата более поздняя или равна заданной тогда записываем путь найденного файла.
echo "$STR" >/var/tmp/fast
fi
done
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [bash]Выцепить нужные данные

Сообщение SLEDopit »

Какой-то у вас странный алгоритм решения. Задаёте конкретную дату, но всё равно проверяете только файлы за последние 24 часа. А если с момента вашей даты прошло больше 24 часов?

Я бы сначала создал файл с заданным таймстампом, а потом нашёл все файлы, которые новее. Ну и по результатам поиска принимал бы решения, что делать дальше.

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

touch -d "2012-12-30 10:00:00" sample_file.tmp
find . -newer sample_file.tmp


зы. вывод ls для старых файлов (более года назад) и свежих файлов в части таймпстампа по умолчанию отличается. Это стоит учитывать.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
rydj
Сообщения: 27

Re: [bash]Выцепить нужные данные

Сообщение rydj »

Совсем старые файлы не нужны. На сасмом деле нужны файлы которые не более недели. Дело такое: есть планировщик который запускает разные обработчики. обработчики результаты пишут в логе. Создаётся каталог с датой и временем в него уже пишутся логи. Идея заключается чтобы чекать всё ли нормально с планировщиком, если новых директорий и логов не появилось после того как планировщик запустился то случилась беда
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [bash]Выцепить нужные данные

Сообщение drBatty »

rydj писал(а):
25.10.2013 18:17
На сасмом деле нужны файлы которые не более недели.

читайте man find, про опцию mtime, если я правильно вас понял. Это будет -mtime -7
SLEDopit писал(а):
25.10.2013 18:00
Я бы сначала создал файл с заданным таймстампом, а потом нашёл все файлы, которые новее.

это вы устаревший подход рекомендуете. Советую почитать про newerXY (опция t). Она работает как ваше -d в touch/date.
SLEDopit писал(а):
25.10.2013 18:00
вывод ls для старых файлов (более года назад) и свежих файлов в части таймпстампа по умолчанию отличается. Это стоит учитывать.

ls в принципе не нужно парсить. Надо сразу выводить дату в нужном виде. А лучше -- не выводить вовсе.
rydj писал(а):
25.10.2013 18:17
Идея заключается чтобы чекать всё ли нормально с планировщиком, если новых директорий и логов не появилось после того как планировщик запустился то случилась беда

с помощью опции newer ищите файлы, которые созданы (mtime) ПОСЛЕ доступа (atime) к исполняемому файлу планировщика.

ЗЫЖ если вы уже юзаете noatime, то вы только-что наступили на эти грабли (:
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21473
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: [bash]Выцепить нужные данные

Сообщение Bizdelnick »

drBatty писал(а):
26.10.2013 19:10
ищите файлы, которые созданы (mtime) ПОСЛЕ доступа (atime) к исполняемому файлу планировщика.

Это при условии, что файловая система смонтирована с опцией atime, в то время как по дефолту всегда relatime (и это правильно).

drBatty писал(а):
26.10.2013 19:10
ЗЫЖ если вы уже юзаете noatime, то вы только-что наступили на эти грабли (:

Почитайте man mount, там опций, связанных с atime, гораздо больше, чем две.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [bash]Выцепить нужные данные

Сообщение drBatty »

Bizdelnick писал(а):
27.10.2013 11:21
Это при условии, что файловая система смонтирована с опцией atime, в то время как по дефолту всегда relatime (и это правильно).

да. И всё равно the file's last access time is always updated if it is more than 1 day old. Т.ч. для ТСа подойдёт, у него время -- неделя. Relatime просто удобная фича, которая не ломает программы и скрипты, и тем не менее не долбит инод на каждом доступе как при atime. Такие скрипты не ломаются потому, что atime всё равно обновляется каждый день. Ну если уж у ТСа с этим проблемы, то он может использовать какой-то продукт метаболизма его планировщика. PID-файл например.

Bizdelnick писал(а):
27.10.2013 11:21
Почитайте man mount, там опций, связанных с atime, гораздо больше, чем две.

да? Я три насчитал:
1. вредная и устаревшая atime
2. новая дефолтная relatime
3. ещё есть strictatime, что-бы рулить atime из юзерспейса.
А про что я не знаю?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
rydj
Сообщения: 27

Re: [bash]Выцепить нужные данные

Сообщение rydj »

Спасибо очень помог find с вашим параметром

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

#!/bin/bash
DIR=/u0/projects/tf_sch2_release/logs
#Задаем дату
Y=2013
MM=10 #Месяц
DD=28  # Число
#Time
H=10  #Час
M=44  #минута
HOST=$(hostname)

find  $DIR -type f  -newermt "$Y-$MM-$DD $H:$M" -print

А можно теперь посмотреть файлы созданные наоборот ДО этого времени. т.е. в идеале софт за котором мы следим должен создавать логи после опр времени. если он их не создал ИЛИ создал ДО заданного времени то что-то не так
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [bash]Выцепить нужные данные

Сообщение SLEDopit »

rydj писал(а):
28.10.2013 12:54
А можно теперь посмотреть файлы созданные наоборот ДО этого времени.

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

find  $DIR -type f  ! -newermt "$Y-$MM-$DD $H:$M" -print


UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
rydj
Сообщения: 27

Re: [bash]Выцепить нужные данные

Сообщение rydj »

Ого, не знал что можно так отрицание юзать, спасибо=)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [bash]Выцепить нужные данные

Сообщение drBatty »

rydj писал(а):
28.10.2013 13:42
Ого, не знал что можно так отрицание юзать, спасибо=)

там ещё есть -o, которая ИЛИ. Т.е. можно например такое задать

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

find \( -type f -o -type d \) -ls

покажет файлы ИЛИ каталоги. Скобки тут нужны для того, что-бы не сработала И, которая неявная всегда.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: