Я хочу проверить linux bash, был ли файл создан больше, чем x назад.
скажем, файл называется text.txt, а время - 2 часа.
if [ what? ]
then
echo print "old enough"
fi
Я хочу проверить linux bash, был ли файл создан больше, чем x назад.
скажем, файл называется text.txt, а время - 2 часа.
if [ what? ]
then
echo print "old enough"
fi
Только для времени модификации
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
, чтобы получить чрезвычайно точное время на произвольной дате/времени.
Время создания не сохраняется.
Сохраняются три временных метки (обычно они могут быть отключены в определенных файловых системах или с помощью определенных параметров файловой системы):
a "Изменить" на файл считается изменением прав, переименованием и т.д. Хотя модификация является только содержанием.
Хотя ctime не является технически временем создания, это довольно часто.
Поскольку ctime не влияет на изменения содержимого файла, он обычно обновляется только при создании файла. И да - я могу слышать, как вы все кричите - он также обновляется, если вы меняете права доступа или права собственности... но обычно это то, что было сделано один раз, обычно в то же время вы помещаете там файл.
Лично я всегда использую mtime для всего, и я думаю, что это то, что вы хотите. Но во всяком случае... здесь перефразирование Guss "непривлекательным" bash, в простой в использовании функции.
#!/bin/bash function age() { local filename=$1 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.
Используя 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, указанного выше
Найти это хорошо, но я думаю, что вы можете использовать другое, особенно если вам нужно, сколько секунд находится старый файл
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.