Поиск файлов за предыдущий месяц
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Поиск файлов за предыдущий месяц
Низкий поклон всем, проявившим интерес!
Задача следующего плана: бэкапить все файлы за предыдущий месяц. В имени файла уже зашита дата в формате ГГГГ-ММ-ДД. Но как вычислить номер предыдущего месяца?
Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.
Задача следующего плана: бэкапить все файлы за предыдущий месяц. В имени файла уже зашита дата в формате ГГГГ-ММ-ДД. Но как вычислить номер предыдущего месяца?
Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.
Re: Поиск файлов за предыдущий месяц
Код: Выделить всё
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.
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: Поиск файлов за предыдущий месяц
fireboltgp писал(а): ↑04.11.2013 09:58Еще интересней было бы искать файлы не по дате в названии, а по дате в аттрибутах.
Код: Выделить всё
FILE_MONTH=$(date --reference="$FILE" +%m)
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Re: Поиск файлов за предыдущий месяц
Это я пробовал перед тем, как запостить тему. Оно работает только в ноябре и декабре ))) А вот второй способ
Код: Выделить всё
date -d " - $(date +%d) days" +%m
работает всегда. Его-то я и искал. Спасибо! Не могли бы вы разъяснить, что тут к чему?
Re: Поиск файлов за предыдущий месяц
Странно. Оно должно работать и с остальными месяцами. Кроме января, да. В январе 0 получится вместо 12. Косяк в алгоритме всё же есть.
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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Re: Поиск файлов за предыдущий месяц
а вот так не наглядней, чтоб без вычислений:
Код: Выделить всё
~$ date --date="last month" +%m
10
~$ date -d "last month" +%m
10
Re: Поиск файлов за предыдущий месяц
Оно может и нагляднее, но не очень здорово работает 30 марта ( покажет март ) или 31 мая ( покажет май ), и в прочих аналогичных случаях.
Код: Выделить всё
$ date --date="2013/03/29 last month" +%m
03
$ date --date="2013/03/25 last month" +%m
02
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.
The more you believe you don't do mistakes, the more bugs are in your code.
Re: Поиск файлов за предыдущий месяц
Потому что когда просишь у 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.
The more you believe you don't do mistakes, the more bugs are in your code.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск файлов за предыдущий месяц
ИМХО всё правильно работает.
ИМХО нужно считать разность дат в секундах, и сравнивать с 2629800 (это примерно число сек. в мес. Можно поточнее нагуглить)
Re: Поиск файлов за предыдущий месяц
Оно работает правильно, но под задачу ТС не подходит, потому что ему нужно получить именно номер предыдущего месяца, а не дату, которая была месяц назад.
Вариант с секундами тоже не проходит, т.к. всегда есть вероятность промахнуться на стыке месяцев ( 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.
The more you believe you don't do mistakes, the more bugs are in your code.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск файлов за предыдущий месяц
SLEDopit
если я правильно понял ТЗ ТСа, то программа, запущенная в конце месяца должна забекапить все файлы с 1го числа этого месяца. Но если уж совсем не с первого, а с момента запуска последнего бекапа. Т.е. тут find -newer last_backup нужен.
А ТС себе всё только усложняет.
и что? Если месяц назад был январь? Да, февраль -- аномально короткий месяц.
Ну а вообще -- ТС должен сам решить, шашечки ему, или ехать. И если шашечки -- пусть думает, какие именно.
если я правильно понял ТЗ ТСа, то программа, запущенная в конце месяца должна забекапить все файлы с 1го числа этого месяца. Но если уж совсем не с первого, а с момента запуска последнего бекапа. Т.е. тут find -newer last_backup нужен.
А ТС себе всё только усложняет.
и что? Если месяц назад был январь? Да, февраль -- аномально короткий месяц.
Ну а вообще -- ТС должен сам решить, шашечки ему, или ехать. И если шашечки -- пусть думает, какие именно.
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Re: Поиск файлов за предыдущий месяц
Мне было нужно, чтобы когда бы я ни запустил башник, он залил мне в архив все файлы с прошлого месяца. Ну а запускаю я его кроном первого числа каждого месяца. А если принять во внимание еще и то, что файл, созданый 31-ого числа, может закрыться даже 1-ого числа след. месяца, способ, который я выбрал, таки самый оптимальный. Я архивирую логи переписок в джаббере.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск файлов за предыдущий месяц
fireboltgp писал(а): ↑09.11.2013 13:22Мне было нужно, чтобы когда бы я ни запустил башник, он залил мне в архив все файлы с прошлого месяца.
поясните, что вы понимаете под словами "с прошлого месяца", почему мы должны гадать? Тут Ванги нет, а телепаты в отпуске.
fireboltgp писал(а): ↑09.11.2013 13:22Ну а запускаю я его кроном первого числа каждого месяца. А если принять во внимание еще и то, что файл, созданый 31-ого числа, может закрыться даже 1-ого числа след. месяца, способ, который я выбрал, таки самый оптимальный.
а какая разница, когда _закроется_ файл? У меня бекап делается для _изменённых_ файлов. Т.е. в бекап за сентябрь попадает файл jabber.log, и в бекап за октябрь попадает "этот же" файл. На самом деле, это другой файл, а именно -- новая версия.
У вас видимо ДВА бекапа:
1. сам джаббер делает бекапы лога.
2. вы ещё хотите делать бекап бекапа.
Я угадал? В таком случае не делайте бекап последнего открытого текущего файла. И делайте бекапы всех файлов от прошлого бекапа до предпоследнего. Если запускать раз в месяц эту программу, получится именно то, что вы хотите.
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Re: Поиск файлов за предыдущий месяц
Что я хотел я уже получил. Да, я там неверно выразился. Я сжимаю все логи за прошлый календарный месяц. Логи - это не бэкапы. Это html-файлы, содержащие журнал переписки между двумя пользователями за конкретные сутки. Их огромная куча за месяц создается. Я получаю переменную с номером предыдущего месяца и ищу файлы, содержание в своем имени эту переменную. Это и просто, и работает 100% четко и метко. А вообще, я ничего не ищу даже, просто указываю tar'у маску имен файлов.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск файлов за предыдущий месяц
fireboltgp писал(а): ↑09.11.2013 13:43Логи - это не бэкапы. Это html-файлы, содержащие журнал переписки между двумя пользователями за конкретные сутки.
логи джаббера == бекапы. Формат и сжатие не имеет значения.
fireboltgp писал(а): ↑09.11.2013 13:43Я получаю переменную с номером предыдущего месяца и ищу файлы, содержание в своем имени эту переменную.
проще, быстрее и надёжнее было-бы сделать
Код: Выделить всё
find -newermt @$DATE1 ! -newermt @$DATE2
эта команда находит (а если надо, то и обрабатывает, например добавляет в архив) все файлы изменённые после $DATE1 и до $DATA2, при этом даты нужно брать в секундах от unix age.
-
- Сообщения: 62
- ОС: openSUSE 12.3 KDE 4.10.3
Re: Поиск файлов за предыдущий месяц
Это спор? Мы спорим что ли? Брать дату в секундах - это уже не проще. Для меня, по крайней мере. Мне сперва надо научиться этим пользоваться. А сейчас я представляю, что я сперва должен как-то рассчитать дату в секундах для одного месяца, потом это делать надо же как-то для каждого месяца, при этом в месяцах разное количество секунд... Все это учесть... Для меня это сложно. Я решил свою проблему просто, просто для меня.
А то, что вы утверждаете, что лог - это то же самое, что и бэкап, ставит под сомнение и сам ваш метод и его работоспособность. Бэкап джаббера - это выгрузка его базы данных, копирование его конфигурации и сжатие этого всего в архив. Из логов я потом программу не восстановлю. Я восстановлю ее из файла конфигурации и файла базы данных.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Поиск файлов за предыдущий месяц
fireboltgp писал(а): ↑09.11.2013 15:30Это спор? Мы спорим что ли? Брать дату в секундах - это уже не проще.
думайте как хотите. Это проще.
fireboltgp писал(а): ↑09.11.2013 15:30А то, что вы утверждаете, что лог - это то же самое, что и бэкап, ставит под сомнение
меня мало волнуют ваши проблемы. Я своё мнение высказал.