2009-04-29 13 views
15

Problème: comprendre l'horodatage suivantImpossible de lire l'horodatage de l'histoire zsh

1241036430 

à ~/.history

: 1241036336:0;vim ~/.zshrc 
: 1241036379:0;vim ~/bin/HideTopBar 
: 1241036421:0;ls 
: 1241036430:0;cat ~/.history 

quand j'ai

setopt EXTENDED_HISTORY 
HISTFILE=~/.history 

dans .zshrc.

Comment lire l'horodatage?

+0

Je suis curieux de savoir ce que le deuxième entier (semble toujours être 0) est. Que représente ce nombre? –

Répondre

1

Ce simple util, appelé localtime est l'or pour la lecture des fichiers avec des horodateurs:

#!/usr/bin/perl 
# http://perl.plover.com/classes/mybin/samples/source/localtime 

if ($ARGV[0] eq '-f') { 
    *show_localtime = \&show_localtime_list; 
    shift; 
} 

if (@ARGV) { 
    for (@ARGV) { 
    print show_localtime($_), "\n"; 
    } 
} else { 
    while (<>) { 
    s/^(\d+)/show_localtime($1)/e; 
    print; 
    } 
} 


sub show_localtime { 
    my $t = shift; 
    scalar localtime $t; 
} 

sub show_localtime_list { 
    my $t = shift; 
    my @a = localtime $t; 
    "@a\n" 
} 

Il gère beaucoup de cas et semble comprendre les deux horodatages en secondes et mini- secondes, etc

$ localtime < ~/.histfile 
<snip> 
: Sat Sep 17 05:55:17 2016:0;cat localtime 
+0

Pouvez-vous utiliser la fonction pour d'autres fichiers d'historique, pas seulement celui de Zsh? –

+0

Oui, ça marche habituellement. Il recherche simplement la première chaîne de chiffres et la convertit en une date lisible par l'homme. – olejorgenb

18

Essayez history -d. Ou tout simplement taper history - et appuyez sur Ctrl-D pour obtenir toutes les différentes options:

% history - 
-D -- print elapsed times 
-E -- dd.mm.yyyy format time-stamps 
-d -- print time-stamps 
-f -- mm/dd/yyyy format time-stamps 
-i -- yyyy-mm-dd format time-stamps 
-m -- treat first argument as a pattern 
-n -- suppress line numbers 
-r -- reverse order of the commands 
+0

Merci pour les explications! –

+0

Nouvelle chose apprise que ctrl-D donnera toutes les options. Merci!! – Buchi

+2

Ne fonctionne pas pour moi, comment puis-je faire cela sous OS X? – juanpastas

12

Vous pouvez afficher toute l'histoire avec horodatages lisible par l'homme à l'aide de ce one-liner provenant an answer on the zsh mailing list:

perl -lne 'm#: (\d+):\d+;(.+)# && printf "%s :: %s\n",scalar localtime $1,$2' $HISTFILE 

Je recommanderais de diriger la sortie vers un pager (less par exemple) pour le rendre plus lisible.

+0

+1 pour avoir crédité la source ... :) –

2

Adendum: Vous pouvez utiliser la commande history lui-même de traduire horodatages trouvés dans les fichiers enregistrés l'histoire ainsi:

Les options de la commande history comme l'a expliqué Nicholas Riley applique aussi bien à des fichiers enregistrés d'histoire, de sorte history -d < historyfile (ou l'une des autres options) traduit bien les horodatages. Ceci est pratique si vous utilisez plus d'un fichier d'historique - J'ai configuré zsh pour conserver un fichier historique par pty pour éviter de mélanger les historiques des shells fonctionnant en parallèle sur le même système (puisque généralement chaque window/screen/... est spécifique à une certaine tâche, et donc les histoires qui sortent d'une utilisation normale finissent par être thématisées).

+1

'history -d olejorgenb