stat: stempel waktu modifikasi suatu file


11

Saya gunakan stat -f %m .bashrcuntuk mendapatkan waktu modifikasi .bashrc saya di osx. Tetapi ketika saya menjalankan perintah yang sama di ubuntu, itu meludah kesalahan:

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

adakah cara yang kompatibel untuk mencapai ini?

Jawaban:


12

Ubuntu menggunakan GNU coreutils stat, sedangkan OSX menggunakan varian BSD. Jadi pada Ubuntu perintahnya agak berbeda:

stat -c %Y .bashrc

Dari man stat:

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

dan:

   %Y     time of last data modification, seconds since Epoch

Jika Anda ingin cara portabel untuk menjalankan ini terlepas dari OS, maka ada beberapa cara untuk melakukannya. Saya pikir saya akan mengatur variabel satu kali ke parameter yang sesuai:

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

Dan kemudian gunakan nilai ini dalam statperintah di mana pun dibutuhkan:

stat $mod_time_fmt .bashrc

7

Itu tergantung pada apa yang Anda maksud dengan "ini". Jika Anda bertanya apakah ada cara yang portabel untuk mendapatkan file ini mtimedengan stat(1), maka tidak ada, tidak ada. BSD stat(1)berbeda dari Linux stat(1).

Jika Anda bertanya apakah ada cara portabel untuk mendapatkan file mtime, maka ya, Anda bisa melakukannya dengan perl(1):

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

5

karena versi OSX dan Ubuntu statmemiliki beberapa perbedaan dalam statstandar OSX untuk keluaran singkat dan statstandar Linux untuk menyatakan beberapa simpai perlu dilompati. Satu kemungkinan adalah dengan hanya menggunakan alias di OSX akan membuat stat melakukan hal yang sama pada keduanya.

Jika Anda tidak keberatan mengatur alias untuk memaksakan keluaran verbose statpada OSX dengan alias stat="stat -x"maka Anda tidak perlu perl.

stat .bashrc| grep Modify adalah semua yang Anda butuhkan di bawah Ubuntu. jika Anda mengatur alias seperti di atas itu berfungsi di bawah OSX juga

Contoh dari Ubuntu 14.04.5 Hasil yang hampir identik dapat diperoleh dari Ubuntu 16.04

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

Jika semua yang Anda inginkan adalah cap waktu, Anda dapat menghapus Modify:dan menahan sisanya

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

Sumber:

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

Output stat pada OSX


saya pikir Anda kehilangan opsi -x di OSX.
fushupinnanren

@ Jerry Anda benar, sayangnya saya harus mengandalkan penelitian untuk bit OSX karena saya tidak memiliki OSX. Jawaban yang benar.
Penatua Geek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.