¿Cómo cambio el formato de hora utilizado por la línea de comando ls en osx?

27

Quiero hacer que el lstiempo de visualización en ISOformato (formato militar). ¿Cómo puedo cambiar este comportamiento?

En Linux sabía que podía forzar a ls a mostrar el tiempo en formato largo usin --full-timepero esto no funciona en OS X.

Actualización: Sé que el formato utilizado por el comando se basa en la localeconfiguración. El problema es que en OS XI no pude usar el truco de configuración LC_TIME=en_DK.

Sorin
fuente
1
Una no respuesta, pero aún posiblemente útil: el comando stat (1) es bastante flexible y se puede hacer que muestre marcas de tiempo en cualquier formato deseado.
Harald Hanche-Olsen
gls (gnu ls) que mencioné en mi respuesta puede tomar un --style = flag donde puede especificar una cadena + FORMAT, para que pueda hacer que la fecha aparezca de la forma que desee.
barryj
Ojalá supiera un camino. El manual BSD de Apple lsparece no ofrecer nada para formatear fechas y horas, aparte de cambiar la zona horaria y ordenar por fecha y hora en lugar de alfa. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Respuestas:

16

Si instala gnu coreutils, gnu ls está disponible, lo que hará lo que sea necesario. Si usa brew como administrador de paquetes, es tan simple como:

brew install coreutils
gls -l --time-style=full-iso
barryj
fuente
Gracias, esto es útil pero no resuelve el problema. El formato completo utilizado todavía no es ISO-8601.
sorin
OK, puedes instalar gnu coreutils que incluye gnu ls, que hará lo que quieras. La forma más fácil es una de cerveza, MacPorts o Fink. Yo uso brew, así que solo funciona 'brew install coreutils'. Entonces tendrás gls disponibles.
barryj
1
En particular, brew install coreutilsresulta en la /usr/local/bin/glsinstalación, por lo que debe ejecutar en glslugar de ls.
erik.weathers
Debe especificar el formato de hora con gls -l --time-syle="+%I"(o cualquiera que sea el gdateformato de estilo correcto para ISO-8601).
rubynorails
La llamada correcta es así; gls -l --time-style = full-iso
AnneTheAgile
13

El lscomando incorporado de OS X no toma tiempo formateando argumentos, pero el statcomando toma cadenas de formato de tiempo de ejecución para que pueda obtener una aproximación de lo que quiere haciendo:

stat -l -t '%FT%T' *

La %FT%Tproduce un ISO8601 marca de tiempo local. Agregue un %zsi desea un desplazamiento UTC.

Pero aunque la marca de tiempo es correcta, el resto solo se aproxima a lo que obtendría de ls. Por ejemplo, ls -lalinea correctamente los campos en columnas, puede colorear el resultado y, por supuesto, enumera el contenido del directorio en lugar de requerir que pase todos los nombres de archivo como argumentos. Al menos puede reproducir la alineación adecuada canalizando la salida trpara convertir todos los espacios en pestañas:

stat -l -t '%F%T' * | tr ' ' \\t

Alternativamente, creo que debería ser posible ls -lproducir una marca de tiempo ISO8601 definiendo un entorno personalizado, pero no lo he visto hecho.

alga
fuente
-1

ls -l --time-style=iso funciona bien para mi

Kumar
fuente
1
No lo hace León de montaña.
Nakilon
2
Tampoco en Mavericks.
Clay Bridges
44
Probablemente funcione bien para el OP, porque él o ella ha instalado un sistema que lsno es sin darse cuenta, a través de un administrador de paquetes como brew.
algal
1
De acuerdo con @algal. He /usr/local/bin/glsinstalado a través de brew install coreutils, y eso admite la --time-styleopción. Es posible que se haya ejecutado el OP, brew install coreutils --with-default-nameslo que resultaría en la /usr/local/bin/lsinstalación (entre otras utilidades), o tal vez el OP configuró un enlace simbólico manual gls.
erik.weathers
¿Qué ves cuando entras which ls?
mschaef