stat: отметка времени модификации файла

Замена sed в вопросе удалит все символы после % p , а не только тире, поскольку [^ K] является частью совпадающей строки. Вы можете обойти это, захватив символ после % p с (экранированными) круглыми скобками и вернув его с помощью \ 1 . В sed :

$ echo '%p %p %pK' | sed 's/%p\([^K]\)/%pK\1/g'
%pK %pK %pK

Хотя вы можете захотеть использовать [^ a-zA-Z] или аналогичный на тот случай, если вы должны были использовать другие модификаторы для % p .

11
07.03.2017, 00:02
3 ответа

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

stat -c %Y .bashrc

Из man stat :

  -c --format = FORMAT 
использовать указанный ФОРМАТ вместо стандартного; выводить новую строку - 
после каждого использования FORMAT 
 

и:

 % Y время последнего изменения данных, секунды с 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
16
27.01.2020, 19:57

, поскольку версии stat для OSX и Ubuntu имеют некоторые отличия в том, что OSX stat по умолчанию использует краткий вывод, а Linux stat - подробный, некоторые обручи могут потребоваться быть перепрыгнутым. Одна из возможностей - просто использовать псевдоним в 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

Если вам нужна только временная метка, вы можете удалить Измените: и оставьте остальное с помощью

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

Источники:

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

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

8
27.01.2020, 19:57

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

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

perl -e 'print +(stat $ARGV[0])[9], "\n"' file
8
27.01.2020, 19:57

Теги

Похожие вопросы