Поиск файлов за предыдущий месяц

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

Низкий поклон всем, проявившим интерес!

Задача следующего плана: бэкапить все файлы за предыдущий месяц. В имени файла уже зашита дата в формате ГГГГ-ММ-ДД. Но как вычислить номер предыдущего месяца?
Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.

Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Поиск файлов за предыдущий месяц

Сообщение SLEDopit »

fireboltgp писал(а):
04.11.2013 09:58
Но как вычислить номер предыдущего месяца?

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

MONTH=$(( $(date +%m) - 1 ))
либо
date -d " - $(date +%d) days" +%m


fireboltgp писал(а):
04.11.2013 09:58
Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.

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

find . -mtime -30 # но в данном случае месяц принимается за 30 дней, а не за реальный месяц
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.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Поиск файлов за предыдущий месяц

Сообщение Bizdelnick »

fireboltgp писал(а):
04.11.2013 09:58
Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.

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

FILE_MONTH=$(date --reference="$FILE" +%m)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Re: Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

SLEDopit писал(а):
04.11.2013 10:03
MONTH=$(( $(date +%m) - 1 ))

Это я пробовал перед тем, как запостить тему. Оно работает только в ноябре и декабре ))) А вот второй способ

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

date -d " - $(date +%d) days" +%m

работает всегда. Его-то я и искал. Спасибо! Не могли бы вы разъяснить, что тут к чему?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Поиск файлов за предыдущий месяц

Сообщение SLEDopit »

fireboltgp писал(а):
04.11.2013 12:24
Оно работает только в ноябре и декабре )))
Странно. Оно должно работать и с остальными месяцами. Кроме января, да. В январе 0 получится вместо 12. Косяк в алгоритме всё же есть.

fireboltgp писал(а):
04.11.2013 12:24
Не могли бы вы разъяснить, что тут к чему?

date -d " - $(date +%d) days" +%m :
разберём пример для сегодняшнего числа ( 4 ноября )
сначала $(date +%d) - заменяется на сегодняшнее число
потом задаётся -d " - 4 days" , т.е. получается 31 октября ( последний день предыдушего месяца )
и последним шагом выводится получившаяся дата в формате +%m ( т.е. просто номер месяца )
более подробно в man date.
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.
Спасибо сказали:
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Re: Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

SLEDopit писал(а):
04.11.2013 12:34
разберём пример для сегодняшнего числа


Большое спасибо! Въехал в эту арифметику.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Поиск файлов за предыдущий месяц

Сообщение nerve »

а вот так не наглядней, чтоб без вычислений:

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

~$ date --date="last month" +%m
10
~$ date -d "last month" +%m
10
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Поиск файлов за предыдущий месяц

Сообщение SLEDopit »

nerve писал(а):
04.11.2013 13:49
date --date="last month" +%m
Оно может и нагляднее, но не очень здорово работает 30 марта ( покажет март ) или 31 мая ( покажет май ), и в прочих аналогичных случаях.

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

 $ date --date="2013/03/29 last month" +%m
03
 $ date --date="2013/03/25 last month" +%m
02
С date '- 1 month' та же фигня.
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.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Поиск файлов за предыдущий месяц

Сообщение nerve »

SLEDopit писал(а):
04.11.2013 13:57
С date '- 1 month' та же фигня.

а почему так?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Поиск файлов за предыдущий месяц

Сообщение SLEDopit »

nerve писал(а):
04.11.2013 16:39
а почему так?
Потому что когда просишь у date вывести дату "месяц назад", он вполне логично смотрит, сколько дней было в предыдушем месяце и отнимает их количество от текущей даты. Поэтому и получается, что 31 мая "месяц назад" было 1 мая, а не 30 марта ( что в общем-то то достаточно логично, иначе получается, что и 30 и 31 мая "месяц назад" == 30 марта ).
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.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Поиск файлов за предыдущий месяц

Сообщение drBatty »

SLEDopit писал(а):
04.11.2013 13:57
но не очень здорово работает 30 марта ( покажет март )

ИМХО всё правильно работает.

ИМХО нужно считать разность дат в секундах, и сравнивать с 2629800 (это примерно число сек. в мес. Можно поточнее нагуглить)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Поиск файлов за предыдущий месяц

Сообщение SLEDopit »

drBatty писал(а):
09.11.2013 11:38
ИМХО всё правильно работает.
Оно работает правильно, но под задачу ТС не подходит, потому что ему нужно получить именно номер предыдущего месяца, а не дату, которая была месяц назад.
Вариант с секундами тоже не проходит, т.к. всегда есть вероятность промахнуться на стыке месяцев ( 1 марта оно может вообще январь показать, а 31 мая всё тот же май ).
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.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Поиск файлов за предыдущий месяц

Сообщение drBatty »

SLEDopit
если я правильно понял ТЗ ТСа, то программа, запущенная в конце месяца должна забекапить все файлы с 1го числа этого месяца. Но если уж совсем не с первого, а с момента запуска последнего бекапа. Т.е. тут find -newer last_backup нужен.

А ТС себе всё только усложняет.

SLEDopit писал(а):
09.11.2013 11:41
1 марта оно может вообще январь показать

и что? Если месяц назад был январь? Да, февраль -- аномально короткий месяц.

Ну а вообще -- ТС должен сам решить, шашечки ему, или ехать. И если шашечки -- пусть думает, какие именно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Re: Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

drBatty писал(а):
09.11.2013 11:55
запущенная в конце месяца должна забекапить все файлы с 1го числа этого месяца


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

Re: Поиск файлов за предыдущий месяц

Сообщение drBatty »

fireboltgp писал(а):
09.11.2013 13:22
Мне было нужно, чтобы когда бы я ни запустил башник, он залил мне в архив все файлы с прошлого месяца.

поясните, что вы понимаете под словами "с прошлого месяца", почему мы должны гадать? Тут Ванги нет, а телепаты в отпуске.
fireboltgp писал(а):
09.11.2013 13:22
Ну а запускаю я его кроном первого числа каждого месяца. А если принять во внимание еще и то, что файл, созданый 31-ого числа, может закрыться даже 1-ого числа след. месяца, способ, который я выбрал, таки самый оптимальный.

а какая разница, когда _закроется_ файл? У меня бекап делается для _изменённых_ файлов. Т.е. в бекап за сентябрь попадает файл jabber.log, и в бекап за октябрь попадает "этот же" файл. На самом деле, это другой файл, а именно -- новая версия.

У вас видимо ДВА бекапа:

1. сам джаббер делает бекапы лога.

2. вы ещё хотите делать бекап бекапа.

Я угадал? В таком случае не делайте бекап последнего открытого текущего файла. И делайте бекапы всех файлов от прошлого бекапа до предпоследнего. Если запускать раз в месяц эту программу, получится именно то, что вы хотите.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Re: Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

drBatty писал(а):
09.11.2013 13:33
получится именно то, что вы хотите.


Что я хотел я уже получил. Да, я там неверно выразился. Я сжимаю все логи за прошлый календарный месяц. Логи - это не бэкапы. Это html-файлы, содержащие журнал переписки между двумя пользователями за конкретные сутки. Их огромная куча за месяц создается. Я получаю переменную с номером предыдущего месяца и ищу файлы, содержание в своем имени эту переменную. Это и просто, и работает 100% четко и метко. А вообще, я ничего не ищу даже, просто указываю tar'у маску имен файлов.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Поиск файлов за предыдущий месяц

Сообщение drBatty »

fireboltgp писал(а):
09.11.2013 13:43
Логи - это не бэкапы. Это html-файлы, содержащие журнал переписки между двумя пользователями за конкретные сутки.

логи джаббера == бекапы. Формат и сжатие не имеет значения.
fireboltgp писал(а):
09.11.2013 13:43
Я получаю переменную с номером предыдущего месяца и ищу файлы, содержание в своем имени эту переменную.

проще, быстрее и надёжнее было-бы сделать

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

find -newermt @$DATE1 ! -newermt @$DATE2

эта команда находит (а если надо, то и обрабатывает, например добавляет в архив) все файлы изменённые после $DATE1 и до $DATA2, при этом даты нужно брать в секундах от unix age.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
fireboltgp
Сообщения: 62
ОС: openSUSE 12.3 KDE 4.10.3

Re: Поиск файлов за предыдущий месяц

Сообщение fireboltgp »

drBatty писал(а):
09.11.2013 14:01
при этом даты нужно брать в секундах


Это спор? Мы спорим что ли? Брать дату в секундах - это уже не проще. Для меня, по крайней мере. Мне сперва надо научиться этим пользоваться. А сейчас я представляю, что я сперва должен как-то рассчитать дату в секундах для одного месяца, потом это делать надо же как-то для каждого месяца, при этом в месяцах разное количество секунд... Все это учесть... Для меня это сложно. Я решил свою проблему просто, просто для меня.

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

Re: Поиск файлов за предыдущий месяц

Сообщение drBatty »

fireboltgp писал(а):
09.11.2013 15:30
Это спор? Мы спорим что ли? Брать дату в секундах - это уже не проще.

думайте как хотите. Это проще.
fireboltgp писал(а):
09.11.2013 15:30
А то, что вы утверждаете, что лог - это то же самое, что и бэкап, ставит под сомнение

меня мало волнуют ваши проблемы. Я своё мнение высказал.

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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