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.

Sorin
la source
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
barryj
la source
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.

algue
la source
-1

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

Kumar
la source
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