stat: временная метка изменения файла

11

Я использую, stat -f %m .bashrcчтобы получить время модификации моего .bashrc на OSX. Но когда я запускаю ту же команду в Ubuntu, она выдает ошибку:

stat: cannot read file system information for %m': No such file or directory

Есть ли совместимый способ добиться этого?

fushupinnanren
источник

Ответы:

12

Ubuntu использует GNU coreutils stat, тогда как OSX использует вариант BSD. Так что в Ubuntu команда немного отличается:

stat -c %Y .bashrc

От man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new
          line after each use of FORMAT

а также:

   %Y     time of last data modification, seconds since Epoch

Если вам нужен переносимый способ их запуска независимо от ОС, то есть несколько способов сделать это. Я думаю, что я бы один раз установил переменную для соответствующих параметров:

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

И затем используйте это значение в statкоманде, где это необходимо:

stat $mod_time_fmt .bashrc
Цифровая травма
источник
7

Это зависит от того, что вы подразумеваете под «этим». Если вы спрашиваете , есть ли переносимый способ получить файл нет mtimeс stat(1), то нет, нет. BSD stat(1)отличается от Linux stat(1).

Если вы спрашиваете, есть ли переносимый способ получить файл mtime, то да, вы можете сделать это с помощью perl(1):

perl -e 'print +(stat $ARGV[0])[9], "\n"' file
Сату Кацура
источник
5

Так как версии OSX и Ubuntu statимеют некоторые различия в том, что по statумолчанию OSX кратко выводит, а по statумолчанию Linux - многословно, некоторые скачки придется перепрыгивать. Одной из возможностей будет простое использование псевдонима в OSX, что сделает stat одинаковым для обоих.

Если вы не против установить псевдоним для принудительного вывода подробных сведений statо OSX с помощью, alias stat="stat -x"тогда вам не нужен perl.

stat .bashrc| grep Modify это все, что вам нужно под Ubuntu. если вы установите псевдоним, как указано выше, он работает и под OSX

Пример из Ubuntu 14.04.5 Практически идентичные результаты можно получить из Ubuntu 16.04

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

Если вам нужна только временная метка, вы можете удалить Modify:и сохранить оставшуюся часть

stat .bashrc| grep Modify | cut -c 9-

Источники:

https://ss64.com/osx/stat.html

Вывод статистики на OSX

Старейшина Гик
источник
я думаю, что вам не хватает опции -x на OSX.
fushupinnanren
@ Дерри, вы правы, к сожалению, я должен положиться на исследование битов OSX, поскольку у меня нет OSX. Исправленный ответ.
Старейшина Гик