- как найти файлы изменяемые (созданные) за последний час, vic, 23:00 , 25-Янв-09 (1)
>Установлена ОС Solaris. Как выяснилось в ней достаточно урезанная функциональность командной оболочки.Не так. Там просто по умолчанию используется sh, а не bash. А sh имеет сам по себе меньшую функциональность. Так же стандартные утилиты имеют меньшее количество опций чем гнушные. Однако туда можно доустановить нужные гнушные или просто поискать альтернативные утилиты в других путях таких как /usr/xpg4/bin. >Мне нужно найти файлы изменяемые (созданные) за последний час, но в Solaris >у команды find есть только ключ -mtime,
однако ключ -cmin утилиты find есть и в солярке, если вот этот ман https://www.opennet.ru/man.shtml?topic=find&category=1&russian=4 не врет :)
- как найти файлы изменяемые (созданные) за последний час, nastr, 12:16 , 26-Янв-09 (2)
>Не так. Там просто по умолчанию используется 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 (не выкладываю сейчас по причине достаточно большого размера).
- как найти файлы изменяемые (созданные) за последний час, vic, 13:24 , 26-Янв-09 (3)
>[оверквотинг удален] >>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
- как найти файлы изменяемые (созданные) за последний час, nastr, 16:10 , 26-Янв-09 (5)
Все 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
- как найти файлы изменяемые (созданные) за последний час, vic, 02:03 , 27-Янв-09 (7)
>[оверквотинг удален] >-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 мдя, не легкий случай, но бывало и хуже ;) установка чего либо в _свой_ домашний путь тоже исключена?
- О! Дас ист настойашчий уникс фантастиш!, Andrey Mitrofanov, 13:34 , 26-Янв-09 (4)
- О! Дас ист настойашчий уникс фантастиш!, 0dmin, 19:58 , 26-Янв-09 (6)
>Деццкий сааад!! И хто бы пел то! :) >TIMESTAMP="`tempfile`" >touch -d "-1 hour" "$TIMESTAMP" >find .... ... ... -newer "$TIMESTAMP" ... ... ... >rm "$TIMESTAMP"
Маладец! Осталось только добавить что touch -d - махровый линуксизм и можно сойти за взрослого ,) touch -t более менее универсален но не понимает relative times - так что строчку готовить в ручную :) Аффтору топика - у самого полк 5.6(!!!) в продакшене - сам офигиваю до чего отцы были сильны духом! :-)
- global description, nastr, 11:16 , 27-Янв-09 (8)
Я постараюсь обрисовать Вам что должен делать этот скрипт. Дважды в день в определённой папке создаются файлы именуемые как 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.
- global description, phpcoder, 11:32 , 27-Янв-09 (10)
>То есть мне нужно представить часы (%H) как две цифры, в случае >если получится 9, чтобы интерпретатор представил как – 09. >Но я не могу разобраться с синтаксисом sprintf.. Вы на каком языке пишете, уважаемый? В shell-е нет sprintf, а если бы и был, то вызывался бы он явно не как sprintf() Вместо H1=sprintf("%02i",$H1) попробуйте H1=`printf '%02i' $H1`
- global description, nastr, 12:27 , 27-Янв-09 (11)
>Вместо > >H1=sprintf("%02i",$H1) > >попробуйте > >H1=`printf '%02i' $H1` Спасибо большое, так заработало: H1=`echo $H - 1 | bc`; H1=`printf '%02i' $H1`
- global description, phpcoder, 12:44 , 27-Янв-09 (12)
>Спасибо большое, так заработало: >H1=`echo $H - 1 | bc`; H1=`printf '%02i' $H1` Зачем использовать bc для декремента переменной? Можно обойтись стандартным expr: H1=`expr $H - 1` Также подумайте, что будет если от нуля вы отнимете один? По идее вы должны получить 23 часа, но математически вы получите -1, что неверно для вас.
- Axe Effect отдыхает, Andrey Mitrofanov, 11:31 , 27-Янв-09 (9)
>Маладец! Осталось только добавить что touch -d - махровый линуксизм и можно >сойти за взрослого ,) Спасибо! Я исправлюсь, правда-правла! %) Вот так д.б. вполне позикс-вей: TIMESTAMP="`tempfile`" touch "$TIMESTAMP" sleep 3600 find .... ... ... -newer "$TIMESTAMP" ... ... ... rm "$TIMESTAMP" >до чего отцы были сильны духом! :-) ...они _решились_ размножаться... $*)
|