Как задать последний день прошлого месяца?, nastr, 27-Июн-09, 11:55 [смотреть все]На удалённом сервере каждый час создаётся новый файл, который именуется так - filename_$(date "+%Y_%m_%d_%H")_00_00.cvs, в кроне установлен скрипт который запскается в 01 минуту каждый час, и крирует по ftp файл за предидущий час. Задача казалось бы не сложная. задаю переменные для указания что копировать по ftp: if [ `date "+%H"` -eq 00 ] then var=filename_$(date "+%Y_%m")_$(expr $(date "+%d") - 1)_23_00_00.cvs else var=filename_$(date "+%Y_%m_d")_$(expr $(date "+%H") - 1)_00_00.cvs fi Но как быть если к примеру сегодня 01 число? Ведь $(expr $(date "+%d") - 1) выдаст мне 00, а мне жунно к примеру 31 (количество дней в прошлом месяце). Как задать предидущий день, час, не по средствам функции expr, вычитания единицы?
|
- Как задать последний день прошлого месяца?, Andrey, 21:47 , 27-Июн-09 (1)
если сегодня 1-е то можно использовать date -d yesterday +%d
- Как задать последний день прошлого месяца?, Sarge, 23:02 , 27-Июн-09 (2)
вообще вся задача решается с помощью добавления к date параметра: -d "-1 hour"
- Как задать последний день прошлого месяца?, allez, 17:49 , 28-Июн-09 (3)
>Как задать предидущий день, час, не по средствам функции expr, вычитания единицы? А какая ОС на сервере установлена? Если Linux, то приведенные выше советы сработают, если же что-то другое - то очень даже могут и не сработать. P. S. Сообщать о том, какая ОС используется - элементарное правило хорошего тона. ;-)
- Как задать последний день прошлого месяца?, nastr, 16:51 , 30-Июн-09 (5)
>А какая ОС на сервере установлена? Если Linux, то приведенные выше советы >сработают, >если же что-то другое - то очень даже могут и не сработать. >P. S. Сообщать о том, какая ОС используется - элементарное правило хорошего >тона. ;-) Спасибо большое за совет. На одном сервере под Win2003, установлен cygwin, на нём date -d работает нормально. Остальные сервера работают под SunOS там date -d не работает. Пока что на срверах под SunOS использую слудущую конструкцию скрипта g=0; while true do if [ $(date "+%M") -eq 00 ] && [ $g -ne 1 ] && [ $(date "+%H") -ne 00 ] then sleep 3 newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_%d_$(expr $(date "+%H") - 1)"`*.csv) case $newstr in $str);; *) echo $newstr;; esac g=1 sleep 13 elif [ $(date "+%H") -eq 00 ] && [ $g -ne 1 ] && [ $(date "+%M") -eq 00 ] then sleep 3 newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_$(expr $(date "+%d") - 1)"_23`*.csv) case $newstr in $str);; *) echo $newstr;; esac g=1 sleep 13 else newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_%d_%H"`*.csv) case $newstr in $str);; *) echo $newstr str=$newstr;; esac fi if [ $(date "+%M") -eq 01 ] && [ $(date "+%S") -lt 05 ] then g=0 fi done
- Как задать последний день прошлого месяца?, Andrey Mitrofanov, 15:22 , 30-Июн-09 (4)
1// К тому вопросу, что в теме: показать дату дня перед первым числом сего месяца:$ date -d "`date +%Y-%m`-01 -1 day" +%F 2009-05-31 $ date +%F 2009-06-30 $ _ - без предположения, что сегодя - первое. И год тоже "переносится": $ date -d "`date -d 2009-01-10 +%Y-%m`-01 -1 day" +%F 2008-12-31 $ _ 2// По поводу "только в линуксе", на самом деле "в date из GNU coreutils".
- Как задать последний день прошлого месяца?, allez, 17:18 , 30-Июн-09 (6)
>2// По поводу "только в линуксе", на самом деле "в date из GNU coreutils". Я совсем не уверен в том, что вопрошающий в курсе таких тонкостей, как существование GNU-, BSD- и прочих версий различных утилит. Оттого и не мудрствовал лукаво, ибо GNU coreutils практически только в Линуксе по умолчанию и устанавливаются. :-)
|