Comment changer le format d'heure utilisé par la ligne de commande ls sur osx?


27

Je veux faire lsafficher l'heure au ISOformat (format militaire). Comment puis-je changer ce comportement?

Sous Linux, je savais que je pouvais forcer ls à afficher l'heure au format long par usin --full-timemais cela ne fonctionne pas sur OS X.

Mise à jour: je sais que le format utilisé par la commande est basé sur les localeparamètres. Le problème est que sur OS XI n'a pas pu utiliser l'astuce de réglage LC_TIME=en_DK.


1
Une non-réponse, mais toujours utile: la commande stat (1) est assez flexible et peut être faite pour afficher des horodatages dans n'importe quel format souhaité.
— Harald Hanche-Olsen

gls (gnu ls) que j'ai mentionné dans ma réponse peut prendre un indicateur --style = où vous pouvez spécifier une chaîne + FORMAT, afin que vous puissiez faire apparaître la date comme vous le souhaitez.
— barryj

J'aimerais bien connaître un moyen. Le manuel BSD d'Apple pour lssemble ne rien offrir pour le formatage des heures, à part le changement de fuseau horaire et le tri par date et heure plutôt que par alpha. developer.apple.com/library/mac/documentation/Darwin/Reference/…
— jtheletter

Réponses:


16

Si vous installez gnu coreutils, alors gnu ls est disponible, qui fera ce qui est requis. Si vous utilisez brew comme gestionnaire de packages, c'est aussi simple que:

brew install coreutils
gls -l --time-style=full-iso

Merci, c'est utile mais cela ne résout pas le problème. Le format complet utilisé n'est toujours pas ISO-8601.
— sorin

OK - vous pouvez installer gnu coreutils qui inclut gnu ls, qui fera ce que vous voulez. Le moyen le plus simple est celui de brassage, MacPorts ou Fink. J'utilise brew - il suffit donc de lancer les travaux 'brew install coreutils'. Vous aurez alors gls disponible.
— barryj

1
Notamment, cela brew install coreutilsentraîne l' /usr/local/bin/glsinstallation, vous devez donc exécuter glsau lieu de ls.
— erik.weathers

Vous devez spécifier le format d'heure avec gls -l --time-syle="+%I"(ou quel que soit le gdateformat de style correct pour ISO-8601).
— rubynorails

L'appel correct est donc; gls -l --time-style = full-iso
— AnneTheAgile

13

La lscommande intégrée d'OS X ne prend pas d'arguments de formatage temporel, mais la statcommande prend des chaînes de formatage strftime afin que vous puissiez obtenir une approximation de ce que vous voulez en faisant:

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

Le %FT%Tproduit un horodatage local ISO8601. Ajoutez un %zsi vous souhaitez un décalage UTC.

Mais bien que l'horodatage soit correct, le reste ne fait qu'approcher ce que vous obtiendriez de ls. Par exemple, ls -laligne correctement les champs en colonnes, peut coloriser la sortie et, bien sûr, il répertorie le contenu du répertoire plutôt que de vous obliger à passer tous les noms de fichiers comme arguments. Vous pouvez au moins reproduire l'alignement correct en canalisant la sortie trpour convertir tous les espaces en tabulations:

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

Alternativement, je pense qu'il devrait être possible de ls -lproduire un horodatage ISO8601 en définissant un environnement local personnalisé, mais je ne l'ai pas vu faire.


-1

ls -l --time-style=iso fonctionne bien pour moi.


1
Non. Lion de montagne.
— Nakilon

2
Pas sur Mavericks non plus.
— Clay Bridges

4
Cela fonctionne probablement très bien pour l'OP, car il ou elle a installé un non-système lssans s'en rendre compte, via un gestionnaire de paquets comme brew.
— algal

1
D'accord avec @algal. J'ai /usr/local/bin/glsinstallé via brew install coreutils, et cela prend en charge l' --time-styleoption. L'OP peut avoir fonctionné, brew install coreutils --with-default-namesce qui entraînerait /usr/local/bin/lsson installation (parmi d'autres utilitaires), ou peut-être que l'OP a créé un lien symbolique manuel vers gls.
— erik.weathers

Que voyez-vous en entrant which ls?
— mschaef
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.