7 ответов:
только для времени модификации
if test `find "text.txt" -mmin +120` then echo old enough fiили, то же самое в одной строке:
#!/bin/bash find text.txt -mmin +120 -exec echo "old enough" \;можно использовать
-cminдля изменения или-aminпо времени доступа. Как указывали другие, я не думаю, что вы можете отслеживать время создания.
мне всегда нравилось использовать
date -r /the/file +%sнайти его возраст.вы также можете сделать
touch --date '2015-10-10 9:55' /tmp/fileчтобы получить чрезвычайно мелкозернистое время на произвольную дату / время.
время создания не хранится.
что хранятся три метки времени (как правило, они могут быть отключены на определенных файловых системах или с помощью определенных параметров файловой системы):
- время последнего доступа
- время последнего изменения
- последние изменения
"изменение" файла считается изменением разрешения, переименованием и т. д. В то время как изменение только содержание.
С помощью
statчтобы выяснить дату последнего изменения файла,dateчтобы выяснить текущее время и либеральное использование башизмов, можно сделать тест, который вы хотите на основе последнего времени модификации файла1.if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then echo "$somefile is older then 2 hours" fiв то время как код немного менее читаемым, чем
findподход, я думаю, что его лучший подход, то работаетfindпосмотреть файл, который вы уже "нашли". Кроме того, дата манипуляции весело ; -)
- Как правильно заметил Фил время создания не записывается, а используется
%Zвместо%Yниже, чтобы получить "изменить время", которое может быть то, что вы хотите.[обновление]
для пользователей mac используйте
stat -f "%m" $somefileвместо конкретного синтаксиса Linux выше
хотя ctime не технически время творения, оно довольно часто есть.
поскольку ctime не зависит от изменений содержимого файла, он обычно обновляется только при создании файла. И да - я слышу, как вы все кричите - он также обновляется, если вы измените права доступа или права собственности... но обычно это то, что делается один раз, обычно в то же время вы помещаете файл туда.
лично я всегда использую mtime за все, и я думаю, что это то, что вы хотите. Но все равно... вот перефразирование "непривлекательного" bash Guss, в простой в использовании функции.
#!/bin/bash function age() { local filename= local changed=`stat -c %Y "$filename"` local now=`date +%s` local elapsed let elapsed=now-changed echo $elapsed } file="/" echo The age of $file is $(age "$file") seconds.
найти один хорошо, но я думаю, что вы можете использовать другой способ, особенно если вам нужно сейчас, сколько секунд файл старый
date -d "now - $( stat -c "%Y" $filename ) seconds" +%sиспользуя GNU date
рассмотрим результат работы инструмента 'stat':
File: `infolog.txt' Size: 694 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 11635578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ fdr) Gid: ( 1000/ fdr) Access: 2009-01-01 22:04:15.000000000 -0800 Modify: 2009-01-01 22:05:05.000000000 -0800 Change: 2009-01-01 22:05:05.000000000 -0800вы можете увидеть здесь три даты для доступа / изменения / изменения. Нет дата создания. Вы можете быть уверены только тогда, когда содержимое файла было изменено (поле" изменить") или его индекс изменен (поле " изменить" поле.)
примеры обновления обоих полей:
"изменить" будет обновлено, если кто-то связал дополнительную информацию конец файла.
"изменить" будет обновлено, если кто-то изменил разрешения через chmod.
Comments