Доброе время суток.
Нужно 1 раз в сутки удалять журналы, которые записываются в формате ddddmmdd*****.
Т.е. запускается скрипт 14 числа и стирает все файлы за 13 число.
команда date +%Y%m%d выводит 20060914.
Что нужно сделать, что бы выводила дату на предыдущие сутки?
А если попадает на 1 число месяца корректно вычислялась предыдущее число.
>Доброе время суток.
>Нужно 1 раз в сутки удалять журналы, которые записываются в формате ddddmmdd*****.
>
>Т.е. запускается скрипт 14 числа и стирает все файлы за 13 число.
>
>команда date +%Y%m%d выводит 20060914.
>Что нужно сделать, что бы выводила дату на предыдущие сутки?
>А если попадает на 1 число месяца корректно вычислялась предыдущее число.Вариант:
YESTERDAY=`echo | awk '{ print strftime( "%Y%m%d", systime()-60*60*24); }'`
echo $YESTERDAY
>Доброе время суток.
>Нужно 1 раз в сутки удалять журналы, которые записываются в формате ddddmmdd*****.
>
>Т.е. запускается скрипт 14 числа и стирает все файлы за 13 число.
>
>команда date +%Y%m%d выводит 20060914.
>Что нужно сделать, что бы выводила дату на предыдущие сутки?
>А если попадает на 1 число месяца корректно вычислялась предыдущее число.date -d yesterday +%Y%m%d
man date сильно способствует ускорению поиска решения :)
>date -d yesterday +%Y%m%d
>
>man date сильно способствует ускорению поиска решения :)Ну, а если gran пользуется FreeBSD, то ему поможет чтение man date на предмет
ключа -v. Команда же в этом случае будет выглядеть так:date -v -1d +%Y%m%d
>>date -d yesterday +%Y%m%d
>>
>>man date сильно способствует ускорению поиска решения :)
>
>Ну, а если gran пользуется FreeBSD, то ему поможет чтение man date
>на предмет
>ключа -v. Команда же в этом случае будет выглядеть так:
>
>date -v -1d +%Y%m%dа вот в солярке нет ни -v, ни --date для команды date :)
я эту задачу делаю через поиск, чтоб лог был что удалила
cd ${OUT}
find * -ctime +1 >>${RUN}/${LOG}
cd ${RUN}
tar -cvf ${TAR} ${LOG}
cat ${LOG} | while read MYFILE
do MY=`basename $MYFILE`
cp ${OUT}/${MYFILE} ${RUN}
gzip ${MYFILE}
tar -rvf ${TAR} ${MYFILE}.gz
rm ${MYFILE}.gz
rm ${OUT}/${MYFILE}
done
rm ${LOG}
У меня только со смещением даты тоже проблема, именно нужно получить значение предыдущей даты на SunOS.
Если кто поможет, заранее спа.
>У меня только со смещением даты тоже проблема, именно нужно получить значение
>предыдущей даты на SunOS.
>Если кто поможет, заранее спа.см первый ответ, там где через awk :) должно помочь
не, не все так сказочно, отвечает на команду из 1-го поста:
awk: syntax error near line 1
awk: illegal statement near line 1
>не, не все так сказочно, отвечает на команду из 1-го поста:
>awk: syntax error near line 1
>awk: illegal statement near line 1верно.. не посмотрел что man awk в линухе открывает man gawk.. в примере используются функции которые являются gnu-расширениями. однако gawk можно установить на солярку.
>>не, не все так сказочно, отвечает на команду из 1-го поста:
>>awk: syntax error near line 1
>>awk: illegal statement near line 1
>
>верно.. не посмотрел что man awk в линухе открывает man gawk.. в
>примере используются функции которые являются gnu-расширениями. однако gawk можно установить на
>солярку.
а можно просто использовать nawk или /usr/xpg4/bin/awk
за исключением синтаксиса "cmd | getline" и копроцессов - тот же гавк.\^P^/
>>Доброе время суток.
>>Нужно 1 раз в сутки удалять журналы, которые записываются в формате ddddmmdd*****.
>>
>>Т.е. запускается скрипт 14 числа и стирает все файлы за 13 число.
>>
>>команда date +%Y%m%d выводит 20060914.
>>Что нужно сделать, что бы выводила дату на предыдущие сутки?
>>А если попадает на 1 число месяца корректно вычислялась предыдущее число.
>
>date -d yesterday +%Y%m%d
>
>man date сильно способствует ускорению поиска решения :)
Спасибо, все получилось.
>Доброе время суток.
>Нужно 1 раз в сутки удалять журналы, которые записываются в формате ddddmmdd*****.
>
>Т.е. запускается скрипт 14 числа и стирает все файлы за 13 число.
>
>команда date +%Y%m%d выводит 20060914.
>Что нужно сделать, что бы выводила дату на предыдущие сутки?
>А если попадает на 1 число месяца корректно вычислялась предыдущее число.rm -f `perl -e 'use POSIX; print strftime("%Y%m%d", localtime(time-60*60*24));'`*****.
Огромное спа!!!
подошло вот это
`perl -e 'use POSIX; print strftime("%m%Y", localtime(time-30*60*60*24));'`
еще вариант:
в cron прописать раз в сутки (23:59) date +%Y... > /tmp/YESTARDAY
yestarday=`cat /tmp/YESTERDAY`
Самый простой вариант
yestarday=`date -u +%Y%m%d`
Дата будет UTC, наше время бежит вперед ихнего, значит если запустить в час ночи по нашему, то дата получится вчерашняя