Как я могу сказать, является ли файл более старым, чем 30 минут от/bin/sh?

Как я пишу сценарий, чтобы определить, является ли файл более старым, чем 30 минут в/bin/sh?

К сожалению, не делает stat команда существует в системе. Это - старая система Unix, http://en.wikipedia.org/wiki/Interactive_Unix

Perl, к сожалению, не установлен в системе, и клиент не хочет устанавливать его, и ничто иное также.

38
задан magol 10 July 2019 в 12:50
поделиться

6 ответов

Вот один из способов использования find.

if test "`find file -mmin +30`"

Команда find должна быть процитирована в том случае, если файл, о котором идет речь, содержит пробелы или специальные символы.

.
67
ответ дан 27 November 2019 в 03:02
поделиться

Ниже приведена информация о возрасте файла в секундах:

echo $(( `date +%s` - `stat -L --format %Y $filename` ))

что означает, что это должно давать значение true/false value (1/0) для файлов старше 30 минут:

echo $(( (`date +%s` - `stat -L --format %Y $filename`) > (30*60) ))

30*60 -- 60 секунд в минуту, не вычисляйте, пусть процессор сделает работу за вас!

28
ответ дан 27 November 2019 в 03:02
поделиться

Если вы пишете скрипт sh, то самый полезный способ - это использовать test с уже упомянутым трюком со статистикой:

if [ `stat --format=%Y $file` -le $(( `date +%s` - 1800 )) ]; then 
    do stuff with your 30-minutes-old $file
fi

Обратите внимание, что [ является символической ссылкой (или эквивалентной) на тест; см. man test, но имейте в виду, что test и [ также являются bash builtins и, таким образом, могут иметь несколько иное поведение. (Также обратите внимание на команду [[ bash-комбинация).

.
16
ответ дан 27 November 2019 в 03:02
поделиться
[

] Хорошо, никакой статистики и калечащей находки. Вот ваши альтернативы: [

] [

] Скомпилируйте [] GNU coreutils [], чтобы получить приличную находку (и множество других полезных команд). Возможно, у вас уже есть gfind. [

]. [

] Может быть, вы можете использовать [] дату [], чтобы получить время модификации файла, если []-r[] работает?[

]. [
(`date +%s` - `date -r $file +%s`) > (30*60)
] [

] В качестве альтернативы, используйте сравнение []-nt[], чтобы выбрать, какой файл более новый, проблема заключается в том, чтобы сделать файл с временем мода 30 минут в прошлом. Обычно это можно сделать с помощью []-nt[], но все ставки отменяются.[

]. [
touch -d '30 minutes ago' 30_minutes_ago
if [ your_file -ot 30_minutes_ago ]; then
    ...do stuff...
fi
] [

] И, наконец, посмотрите, доступен ли Perl, а не боритесь с тем, кто знает, какие версии утилит оболочки.[

] [
use File::stat;
print "Yes" if (time - stat("yourfile")->mtime) > 60*30;
]
10
ответ дан 27 November 2019 в 03:02
поделиться
[

]Это можно сделать путем сравнения со справочным файлом, который вы создали с отметкой времени тридцать минут назад.[

] [

]Сначала создайте файл сравнения, введя[

] [
touch -t YYYYMMDDhhmm.ss /tmp/thirty_minutes_ago
] [

]заменив отметку времени на значение тридцать минут назад. Вы можете автоматизировать этот шаг с помощью тривиального одного вкладыша в Perl.[

] [

]Затем используйте оператор find's newer для сравнения файлов, которые старше, отрицая оператор search[

] [
find . \! -newer /tmp/thirty_minutes_ago -print
]
4
ответ дан 27 November 2019 в 03:02
поделиться
[

] Что значит [] старше 30 минут []: [] модифицированный более 30 минут назад[], или [] созданный более 30 минут назад[]? Надеюсь, что это первое, так как ответы до сих пор верны для этой интерпретации. Во втором случае у Вас возникнут проблемы, так как unix-файловые системы не отслеживают время создания файла. (Записи атрибута файла []ctime[], когда в последний раз изменялось содержимое []inode[], т.е. произошло что-то вроде []chmod[] или []chown[]). [

] [

] Если вам действительно нужно знать, был ли файл создан более 30 минут назад, вы должны либо просканировать соответствующую часть файловой системы многократно с чем-то вроде [] найти [], либо использовать что-то платформозависимое, например [] inotify[].[

].
2
ответ дан 27 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: