stat: часова мітка файлу модифікації


11

Я використовую, stat -f %m .bashrcщоб отримати час модифікації мого .bashrc на OSX. Але коли я запускаю ту саму команду на ubuntu, вона виплює помилку:

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

чи є сумісний спосіб цього досягти?

Відповіді:


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на 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

Виведення stat на OSX


я думаю, що у вас відсутня опція -x на OSX.
fushupinnanren

@ Дозвольте, ви праві, на жаль, я повинен покладатися на дослідження бітів OSX, оскільки у мене немає OSX. Виправлена ​​відповідь.
Старійшина Гек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.