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?

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

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.