Ответы:
Только на время модификации
if test `find "text.txt" -mmin +120`
then
echo old enough
fi
Вы можете использовать -cmin
для изменения или -amin
для времени доступа. Как указывали другие, я не думаю, что вы можете отслеживать время создания.
find
вернул ненулевое значение, когда совпадений не найдено.
text.txt
предполагается, что это не каталог.
[ "$(find path/to/file -mmin +120)" ] && echo "it is old"
Мне всегда нравилось использовать, date -r /the/file +%s
чтобы узнать свой возраст.
Вы также можете сделать touch --date '2015-10-10 9:55' /tmp/file
очень точное время в произвольную дату / время.
let AGE=$(($(date +%s)-$(date -r /path/to/file +%s)))
[с допущением, что создавалось и никогда не
function file-age { FILE_CREATED_TIME=`date -r "$1" +%s`; TIME_NOW=`date +%s`; echo "$[ ${TIME_NOW} - ${FILE_CREATED_TIME} ]"; }
$[ ]
есть, если оно не устарело , то по крайней мере устаревшее и менее переносимое , и $(( ))
вместо него следует использовать ; и обратные кавычки более хрупкие, чем $( )
; а также дефисы в именах функций могут быть не полностью переносимы. Но суть в этом хорошая!
Используя stat
для определения даты последней модификации файла, date
для определения текущего времени и свободного использования bashisms, можно выполнить тест, который вы хотите, на основе времени последнего изменения файла 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, указанного выше
stat
не встроен - очень плохо с моей стороны, исправлю.
Время создания не сохраняется.
В памяти хранятся три метки времени (обычно они могут быть отключены в определенных файловых системах или с помощью определенных параметров файловой системы):
«Изменение» файла засчитывается как изменение разрешений, переименование и т. д. Хотя изменение относится только к содержимому.
Хотя ctime технически не является временем создания, это довольно часто бывает.
Поскольку ctime на него не влияют изменения содержимого файла, обычно оно обновляется только при создании файла. И да - я слышу, как вы все кричите - он также обновляется, если вы меняете права доступа или владельца ... но обычно это то, что делается один раз, обычно в то же время, когда вы помещаете туда файл.
Лично я всегда использую mtime для всего, и я думаю, что это то, что вы хотите. Но в любом случае ... вот переработка «непривлекательного» bash Гуса в простой в использовании функции.
#! / bin / bash function age () { локальное имя файла = $ 1 локально изменено = `stat -c% Y" $ filename "` местное сейчас = `дата +% s` местное истекло let elapsed = теперь-изменено echo $ elapsed } file = "/" echo Возраст $ file составляет $ (age "$ file") секунд.
local changed=$(perl -MFile::stat -e "print stat(\"${filename}\")->mtime")
superuser.com/questions/427551/…
chmod
, примененная к файлу, сводит на нет эту идею. Но я могу жить с тобой, делая это ;-)
+%s
из виду второй тайм
age() { echo $(( $(date +%s) - $(date -r "$1" +%s) )); }
(Спасибо @Grizly за исправление!)
noatime
опцией (что хорошо для производительности, поэтому вы должны использовать его). Так что просто используйте %X
вместо %Y
.
Найти один хороший, но я думаю, вы можете использовать другой способ, особенно если вам нужно сейчас, сколько секунд старый файл
date -d "now - $( stat -c "%Y" $filename ) seconds" +%s
используя дату GNU
Рассмотрим результат работы инструмента 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.