Мне хорошо известно, что я могу find myfile.txt -mtime +5
чтобы проверить, старше ли мой файл, чем 5 дней или нет. Однако я хотел бы получить mtime в днях myfile.txt и сохранить его в переменной для дальнейшего использования. Как бы я это сделал?
Получить mtime конкретного файла, используя Bash?
Ответ 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
[...]