stat: fecha y hora de modificación de un archivo

11

Utilizo stat -f %m .bashrcpara obtener el tiempo de modificación de mi .bashrc en osx. Pero cuando ejecuto el mismo comando en ubuntu, escupe un error:

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

¿Hay alguna manera compatible de lograr esto?

fushupinnanren
fuente

Respuestas:

12

Ubuntu usa los coreutils de GNU stat, mientras que OSX usa la variante BSD. Entonces, en Ubuntu, el comando es un poco diferente:

stat -c %Y .bashrc

De man stat:

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

y:

   %Y     time of last data modification, seconds since Epoch

Si desea una forma portátil de ejecutarlos independientemente del sistema operativo, existen varias formas de hacerlo. Creo que establecería una variable una vez a los parámetros apropiados:

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

Y luego use este valor en el statcomando donde sea necesario:

stat $mod_time_fmt .bashrc
Trauma digital
fuente
7

Depende de lo que quieras decir con "esto". Si estás preguntando si hay una manera portátil para obtener un archivo es mtimecon stat(1), entonces no, no lo hay. BSD stat(1)es diferente de Linux stat(1).

Si está preguntando si hay una forma portátil de obtener un archivo mtime, entonces sí, puede hacerlo con perl(1):

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

dado que las versiones de OSX y Ubuntu stattienen algunas diferencias, los statvalores predeterminados de OSX son de salida concisa y los statvalores predeterminados de Linux para detallar algunos aros tendrían que ser superados. Una posibilidad sería simplemente usar un alias en OSX para que stat funcione igual en ambos.

Si no le importa establecer un alias para forzar la salida detallada de statOSX con, alias stat="stat -x"entonces no necesita perl.

stat .bashrc| grep Modify es todo lo que necesitas en Ubuntu. si configura el alias como arriba, también funciona en OSX

Ejemplo de Ubuntu 14.04.5 Se pueden obtener resultados virtualmente idénticos de Ubuntu 16.04

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

Si todo lo que desea es la marca de tiempo, puede quitar Modify:el resto y retener el resto con

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

Fuentes:

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

Salida de estadísticas en OSX

Elder Geek
fuente
Creo que te falta la opción -x en OSX.
fushupinnanren
@Derry, tienes razón, lamentablemente tengo que confiar en la investigación de los bits OSX ya que no tengo OSX. Respuesta corregida
Élder Geek