Відповіді:
Тільки на час модифікації
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
щоб визначити поточний час та ліберальне використання башизмів, можна зробити тест, який ви хочете, виходячи з часу останньої модифікації файлу 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
не вбудований - мене дуже погано, я виправлю.
Час створення не зберігається.
Зберігаються три часові позначки (як правило, їх можна вимкнути в певних файлових системах або за допомогою певних опцій файлової системи):
a "Зміна" у файлі зараховується як зміна дозволу, перейменування тощо. Поки модифікація є лише вмістом.
Хоча ctime технічно не час створення, він досить часто є.
Оскільки ctime на нього не впливають зміни вмісту файлу, він, як правило, оновлюється лише тоді, коли файл створений. І так - я чую, як ви всі кричали - він також оновлюється, якщо ви змінюєте дозволи доступу чи право власності ... але, як правило, це робиться один раз, як правило, в той же час, коли ви туди поміщаєте файл.
Особисто я завжди використовую mtime для всього, і я думаю, що саме цього ти хочеш. Але в будь-якому випадку ... ось перегляд "непривабливого" басса Гусса, у простій у використанні функції.
#! / бін / баш функціональний вік () { локальне ім'я файлу = $ 1 локальна змінена = `stat -c% Y" $ filename "` local now = `дата +% s` місцевий пройшов нехай минуло = тепер - змінено echo $ минуло } file = "/" echo Вік $ файла становить $ (вік "$ файл") секунд.
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.