как проверить в bash был ли файл создан более x раз назад?



Я хочу проверить в linux bash, был ли файл создан более x раз назад.



допустим, файл называется text.txt и время составляет 2 часа.



 if [ what? ]
then
echo "old enough"
fi
645   7  

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 посмотреть файл, который вы уже "нашли". Кроме того, дата манипуляции весело ; -)


  1. Как правильно заметил Фил время создания не записывается, а используется %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

    Ничего не найдено.