The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как найти файлы изменяемые (созданные) за последний час"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"как найти файлы изменяемые (созданные) за последний час"  
Сообщение от nastr email(??) on 25-Янв-09, 19:37 
Установлена ОС Solaris. Как выяснилось в ней достаточно урезанная функциональность командной оболочки.
Мне нужно найти файлы изменяемые (созданные) за последний час, но в Solaris у команды find есть только ключ -mtime, то есть я могу найти только файлы за последний день. По этому я их сортирую в порядке убывания, что бы последним обрабатывался самый новый файл.
find ./ -mtime -1 -name "CHRIS*" | xargs ls -rt | while read file
Вопрос:
Можно ли каким либо ещё способом найти файлы изменяемые за последний час?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как найти файлы изменяемые (созданные) за последний час"  
Сообщение от vic (??) on 25-Янв-09, 23:00 
>Установлена ОС Solaris. Как выяснилось в ней достаточно урезанная функциональность командной оболочки.

Не так. Там просто по умолчанию используется sh, а не bash. А sh имеет сам по себе меньшую функциональность. Так же стандартные утилиты имеют меньшее количество опций чем гнушные.
Однако туда можно доустановить нужные гнушные или просто поискать альтернативные утилиты в других путях таких как /usr/xpg4/bin.


>Мне нужно найти файлы изменяемые (созданные) за последний час, но в Solaris
>у команды find есть только ключ -mtime,

однако ключ -cmin утилиты find есть и в солярке, если вот этот ман https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не врет :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "как найти файлы изменяемые (созданные) за последний час"  
Сообщение от nastr email(ok) on 26-Янв-09, 12:16 
>Не так. Там просто по умолчанию используется sh, а не bash. А
>sh имеет сам по себе меньшую функциональность. Так же стандартные утилиты
>имеют меньшее количество опций чем гнушные.
>Однако туда можно доустановить нужные гнушные или просто поискать альтернативные утилиты в
>других путях таких как /usr/xpg4/bin.

Доустановка какого либо софта исключена!
На серваке установлены следующие оболочки:
bash; zsh; tcsh; pfcsh; csh; sh; pfsh; jsh; rksh; pfksh; ksh
Но как показала практика, при переходе в другую командную оболочку, у команды find не появляются дополнительные ключи.
>однако ключ -cmin утилиты find есть и в солярке, если вот этот
>ман https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не врет :)

по сему могу предположить что MAN - https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не соответствует действительности. В подтверждение могу выложить "man find" из SunOS 5.8 (не выкладываю сейчас по причине достаточно большого размера).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "как найти файлы изменяемые (созданные) за последний час"  
Сообщение от vic (??) on 26-Янв-09, 13:24 
>[оверквотинг удален]
>>sh имеет сам по себе меньшую функциональность. Так же стандартные утилиты
>>имеют меньшее количество опций чем гнушные.
>>Однако туда можно доустановить нужные гнушные или просто поискать альтернативные утилиты в
>>других путях таких как /usr/xpg4/bin.
>
>Доустановка какого либо софта исключена!
>На серваке установлены следующие оболочки:
>bash; zsh; tcsh; pfcsh; csh; sh; pfsh; jsh; rksh; pfksh; ksh
>Но как показала практика, при переходе в другую командную оболочку, у команды
>find не появляются дополнительные ключи.

есс-но, find никак не связан с оболочкой, это отдельная утилита.
так же как возможно использование предпочитаемой оболочки - так же возможно использование и предпочитаемой утилиты find.

>>однако ключ -cmin утилиты find есть и в солярке, если вот этот
>>ман https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не врет :)
>
>по сему могу предположить что MAN - https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не соответствует действительности. В
>подтверждение могу выложить "man find" из SunOS 5.8 (не выкладываю сейчас
>по причине достаточно большого размера).

попробуйте /usr/xpg4/bin/find или еще какой-нить find если дефолтовый не поддерживает -cmin (что странно).

Сколько всего у вас find утилит?)
find / -name find

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "как найти файлы изменяемые (созданные) за последний час"  
Сообщение от nastr email(ok) on 26-Янв-09, 16:10 
Все find в системе одинаковые, c -cmin не работают.
# find / -name find
/usr/bin/find
/usr/xpg4/bin/find
# ls -lF /usr/bin/find
-r-xr-xr-x   1 root     bin        20040 Jul 28  2001 /usr/bin/find*
# ls -lF /usr/xpg4/bin/find
-r-xr-xr-x   1 root     bin        20040 Jul 28  2001 /usr/xpg4/bin/find*

В солярке у touch нет ключа -d..
touch: illegal option -- d

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "как найти файлы изменяемые (созданные) за последний час"  
Сообщение от vic (??) on 27-Янв-09, 02:03 
>[оверквотинг удален]
>-r-xr-xr-x   1 root     bin  
>     20040 Jul 28  2001 /usr/bin/find*
>
># ls -lF /usr/xpg4/bin/find
>-r-xr-xr-x   1 root     bin  
>     20040 Jul 28  2001 /usr/xpg4/bin/find*
>
>
>В солярке у touch нет ключа -d..
>touch: illegal option -- d

мдя, не легкий случай, но бывало и хуже ;)
установка чего либо в _свой_ домашний путь тоже исключена?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "О! Дас ист настойашчий уникс фантастиш!"  
Сообщение от Andrey Mitrofanov on 26-Янв-09, 13:34 
>Но как показала практика, при переходе в другую командную оболочку, у команды
>find не появляются дополнительные ключи.

Деццкий сааад!!

TIMESTAMP="`tempfile`"
touch -d "-1 hour" "$TIMESTAMP"
find .... ... ... -newer "$TIMESTAMP" ... ... ...
rm "$TIMESTAMP"

Пилите http:/openforum/vsluhforumID9/7769.html#9 штандард http:/openforum/vsluhforumID9/7769.html#6 POSIX http:/openforum/vsluhforumID3/46819.html#5

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "О! Дас ист настойашчий уникс фантастиш!"  
Сообщение от 0dmin on 26-Янв-09, 19:58 
>Деццкий сааад!!

И хто бы пел то! :)


>TIMESTAMP="`tempfile`"
>touch -d "-1 hour" "$TIMESTAMP"
>find .... ... ... -newer "$TIMESTAMP" ... ... ...
>rm "$TIMESTAMP"

Маладец! Осталось только добавить что touch -d - махровый линуксизм и можно сойти за взрослого ,)
touch -t более менее универсален но не понимает relative times - так что строчку готовить в ручную :)

Аффтору топика - у самого полк 5.6(!!!) в продакшене - сам офигиваю до чего отцы были сильны духом! :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "global description"  
Сообщение от nastr email(ok) on 27-Янв-09, 11:16 
Я постараюсь обрисовать Вам что должен делать этот скрипт.
Дважды в день в определённой папке создаются файлы именуемые как NAME_`date "+%m%d%H%M"`\.txt
После этого они передаются на обработку данному скрипту.
Вопрос в том как обращаться (как найти) к этим файлам..
Есть 3 варианта:
1). Обращаться к файлам по имени:
1.1. NAME_`date "+%m%d%H%M"`\.txt – не подходит ведь скрипт может быть запущен на минуту  позже чем был создан файл.
1.2. NAME_`date "+%m%d%H"`*\.txt - не подходит потому что файлы могут появиться в 9:59, а сам скрипт быть запущенным в 10.
1.3. NAME_`date "+%m%d"`*\.txt - не подходит, т.к. получаются все файлы за день, а они создаются дважды на день.
1.4 Вполне достойным вариантом мне кажется следующая конструкция:
H=`date "+%H"`
H1=`echo $H - 1 | bc`; H1=sprintf("%02i",$H1)
if [ -e NAME_`date "+%m%d%H"`*\.txt ]
    then
        grep -v error\#: NAME_`date "+%m%d$H"`*\.txt > 1.txt
    else
        grep -v error\#: NAME_`date "+%m%d$H1"`*\.txt > 1.txt
fi
То есть мне нужно представить часы (%H) как две цифры, в случае если получится 9, чтобы интерпретатор представил как – 09.
Но я не могу разобраться с синтаксисом sprintf..
Использовать два раза if для проверки не хочется.
2). Сравнить с файлом созданным час назад:
TIMESTAMP="`tempfile`"
touch -d "-1 hour" "$TIMESTAMP"
find ./ -newer "$TIMESTAMP" “NAME*”
rm "$TIMESTAMP"
Не подходит, т.к. в SunOS 5.8 у touch нет ключа -d.
3). Использовать find:
3.1. На мой взгляд, идеальным было бы использовать: find ./ -cmin -60, но в данной SunOS 5.8, у find нет ключа -cmin. (я проверил все утилиты find в системе).
3.2. Остаётся использовать find ./ -mtime -1 -name "NAME*" | xargs ls -rt, для того что б последним обрабатывался самый новый файл использую xargs ls –rt.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "global description"  
Сообщение от phpcoder email(??) on 27-Янв-09, 11:32 
>То есть мне нужно представить часы (%H) как две цифры, в случае
>если получится 9, чтобы интерпретатор представил как – 09.
>Но я не могу разобраться с синтаксисом sprintf..

Вы на каком языке пишете, уважаемый? В shell-е нет sprintf, а если бы и был, то вызывался бы он явно не как sprintf()

Вместо

H1=sprintf("%02i",$H1)

попробуйте

H1=`printf '%02i' $H1`

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "global description"  
Сообщение от nastr email(ok) on 27-Янв-09, 12:27 
>Вместо
>
>H1=sprintf("%02i",$H1)
>
>попробуйте
>
>H1=`printf '%02i' $H1`

Спасибо большое, так заработало:
H1=`echo $H - 1 | bc`; H1=`printf '%02i' $H1`


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "global description"  
Сообщение от phpcoder email(??) on 27-Янв-09, 12:44 
>Спасибо большое, так заработало:
>H1=`echo $H - 1 | bc`; H1=`printf '%02i' $H1`

Зачем использовать bc для декремента переменной? Можно обойтись стандартным expr:

H1=`expr $H - 1`

Также подумайте, что будет если от нуля вы отнимете один? По идее вы должны получить 23 часа, но математически вы получите -1, что неверно для вас.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Axe Effect отдыхает"  
Сообщение от Andrey Mitrofanov on 27-Янв-09, 11:31 
>Маладец! Осталось только добавить что touch -d - махровый линуксизм и можно
>сойти за взрослого ,)

Спасибо! Я исправлюсь, правда-правла! %) Вот так д.б. вполне позикс-вей:

TIMESTAMP="`tempfile`"
touch "$TIMESTAMP"
sleep 3600
find .... ... ... -newer "$TIMESTAMP" ... ... ...
rm "$TIMESTAMP"

>до чего отцы были сильны духом! :-)

...они _решились_ размножаться... $*)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру