Как отобразить время изменения файла?
Я хотел бы метод, чтобы найти и распечатать измененное время файла, для использования в скрипте bash.
Я придумал:
ls -l $filename | cut -d ' ' -f '6-8'
Какие выводы:
Jul 26 15:05
Хотя я бы хотел избежать разбора ls
Также было бы полезно иметь год там.
В идеале я хотел бы видеть вывод, похожий на вывод по умолчанию date
команда.
Tue Jul 26 15:20:59 BST 2016
Какие еще полезные методы доступны?
2 ответа
Не использовать ls
это работа для stat
:
stat -c '%y' filename
-c
позволяет нам получить конкретный вывод, здесь %y
получит нам время последнего изменения файла в удобочитаемом формате. Чтобы получить время в секундах с момента использования Epoch %Y
:
stat -c '%Y' filename
Если вы хотите, чтобы имя файла тоже, используйте %n
:
stat -c '%y : %n' filename
stat -c '%Y : %n' filename
Установите спецификаторы формата в соответствии с вашими потребностями. Проверьте man stat
,
Пример:
% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600
% stat -c '%Y' foobar.txt
1469513716
% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt
% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt
Если вы хотите вывод как Tue Jul 26 15:20:59 BST 2016
используйте время Epoch в качестве входных данных для date
:
% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016
% date -d "@$(stat -c '%Y' a.out)" '+%c'
Tue 26 Jul 2016 12:15:21 PM BDT
% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016
Проверьте date
Спецификаторы формата для удовлетворения ваших потребностей. Увидеть man date
тоже.
Я старался
ls -l $filename | cut -d ' ' -f '6-8'
но если дата меньше 10, она пропускает время. Это из-за дополнительного места перед датой, если меньше 10. Попробуйте это:
filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'
Команда awk печатает поля, разделенные пробелами (-F ' '). Надеюсь, что это работает. Я знаю, что это не отвечает на первоначальный вопрос, а только разъяснение по команде ls только для даты и времени. Когда вы Google "Ubuntu получаете дату и время файла", он перечисляет этот вопрос в верхней части, что я и искал, так как год мне тоже не нужен. Для года, даты и времени вы можете попробовать одну из команд ниже. %m печатает номер месяца. %b печатает сокращение месяца: отбросьте%H:%M, если вам не нужны часы и минуты. %-d не печатает ведущий ноль для дня месяца.
date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"