Подтвердить что ты не робот

Получить mtime конкретного файла, используя Bash?

Мне хорошо известно, что я могу find myfile.txt -mtime +5 чтобы проверить, старше ли мой файл, чем 5 дней или нет. Однако я хотел бы получить mtime в днях myfile.txt и сохранить его в переменной для дальнейшего использования. Как бы я это сделал?

4b9b3361

Ответ 1

stat может предоставить вам эту информацию:

filemtime=`stat -c %Y myfile.txt`

%Y дает вам последнюю модификацию как "секунды с эпохи", но есть много других опций; подробнее. Поэтому, если файл был изменен в 2011-01-22 в 15:30 по Гринвичу, вышеупомянутое вернет номер в области 1295710237.

Изменить: Ах, вы хотите время через несколько дней с момента его изменения. Это будет сложнее, не в последнюю очередь потому, что "день" не является фиксированным периодом времени (некоторые "дни" имеют только 23 часа, а другие - 25 лет и т.д. Благодаря летнему времени).

Наивная версия может выглядеть так:

filemtime=`stat -c %Y $1`
currtime=`date +%s`
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff

... но опять же, если предположить, что день всегда ровно 86 400 секунд.

Подробнее об арифметике в bash здесь.

Ответ 2

AGE=$(perl -e 'print -M $ARGV[0]' $file)

будет устанавливать $AGE в возрасте $файла в днях, поскольку оператор Perl -M обрабатывает вызов stat и преобразование в дни для вас.

Возвращаемое значение представляет собой значение с плавающей запятой (например, 6.62849537 дней). Добавьте выражение int в выражение, если вам нужно получить целочисленный результат

AGE=$(perl -e 'print int -M $ARGV[0]' $file)

Ruby и Python также имеют свои однострочные файлы, чтобы ставить файл и возвращать некоторые данные, но я считаю, что Perl имеет наиболее сжатый способ.

Ответ 3

Я это ответ?

A=$(stat -c "%y" myfile.txt)

посмотреть stat-help

stat --help
Usage: stat [OPTION]... FILE...
Display file or file system status.
[...]
-c  --format=FORMAT   use the specified FORMAT instead of the default;
                      output a newline after each use of FORMAT
[...]
The valid format sequences for files
[...]
  %y   Time of last modification, human-readable
  %Y   Time of last modification, seconds since Epoch
[...]