stat: znacznik czasu modyfikacji pliku

11

Używam, stat -f %m .bashrcaby uzyskać czas modyfikacji mojego .bashrc na OSX. Ale kiedy uruchamiam to samo polecenie na Ubuntu, wyrzuca błąd:

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

czy istnieje zgodny sposób na osiągnięcie tego?

fushupinnanren
źródło

Odpowiedzi:

12

Ubuntu używa jądra GNU stat, podczas gdy OSX używa wariantu BSD. Tak więc w Ubuntu polecenie jest nieco inne:

stat -c %Y .bashrc

Od man stat:

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

i:

   %Y     time of last data modification, seconds since Epoch

Jeśli chcesz mieć przenośny sposób na ich uruchomienie, niezależnie od systemu operacyjnego, możesz to zrobić na kilka sposobów. Myślę, że raz ustawiłbym zmienną na odpowiednie parametry:

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

A następnie użyj tej wartości w statpoleceniu, gdy jest to potrzebne:

stat $mod_time_fmt .bashrc
Cyfrowa trauma
źródło
7

To zależy od tego, co rozumiesz przez „to”. Jeśli pytasz, czy to przenośny sposób uzyskać plik znajduje mtimesię stat(1), to nie, nie ma. BSD stat(1)różni się od Linuksa stat(1).

Jeśli pytasz, czy istnieje przenośny sposób na uzyskanie pliku mtime, to tak, możesz to zrobić za pomocą perl(1):

perl -e 'print +(stat $ARGV[0])[9], "\n"' file
Satō Katsura
źródło
5

ponieważ wersje OSX i Ubuntu statmają pewne różnice w tym, że OSX statdomyślnie wyprowadza zwięzłe dane wyjściowe, a Linux statdomyślnie wyjawia, że ​​niektóre obręcze musiałyby zostać przeskoczone. Jedną z możliwości byłoby po prostu użycie aliasu w OSX, dzięki czemu statystyki działałyby tak samo na obu.

Jeśli nie masz nic przeciwko ustawieniu aliasu, aby wymusić pełne wyjście statw OSX alias stat="stat -x", nie potrzebujesz perla.

stat .bashrc| grep Modify to wszystko czego potrzebujesz w Ubuntu. jeśli ustawisz alias jak wyżej, działa to również w OSX

Przykład z Ubuntu 14.04.5 Praktycznie identyczne wyniki można uzyskać z Ubuntu 16.04

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

Jeśli wszystko, czego potrzebujesz, to znacznik czasu, który możesz rozebrać Modify:i zachować resztę za pomocą

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

Źródła:

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

Dane wyjściowe statystyki w OSX

Starszy Geek
źródło
myślę, że brakuje ci opcji -x w OSX.
fushupinnanren
@Derry masz rację, niestety muszę polegać na badaniach bitów OSX, ponieważ nie mam OSX. Poprawiona odpowiedź
Starszy Geek