The OpenNET Project / Index page

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




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

      • О! Дас ист настойашчий уникс фантастиш!, !*! Andrey Mitrofanov, 13:34 , 26-Янв-09 (4)
        >Но как показала практика, при переходе в другую командную оболочку, у команды
        >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

        • О! Дас ист настойашчий уникс фантастиш!, !*! 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"

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

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




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

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