Como importar o histórico bash com hora e data corretas de uma saída de histórico?

2

Eu tenho um arquivo com meu histórico bash e quero "importar" os comandos em uma nova máquina. O arquivo contém uma saída history formatada como HISTTIMEFORMAT="%F%t%T%t" :

$ history > history.txt

Então o resultado é:

    1  2018-01-01   17:56:36    foo
    2  2018-01-01   18:01:21    bar
    3  2018-01-01   18:02:02    buz

Quando eu substituir o ~/.bash_history pelo conteúdo desse arquivo, o contador, a data e o horário se tornam parte do comando. Então, a saída do history parece como

    1  2018-06-13   18:10:15    1  2018-01-01   17:56:36    foo
    2  2018-06-13   18:10:15    2  2018-01-01   18:01:21    bar
    3  2018-06-13   18:10:15    3  2018-01-01   18:02:02    buz

Limpei a lista de comandos antes de importá-la. Apenas o abriu em um editor de texto e substituiu " ^[\s]+[0-9]+[\s]+[0-9]{4}-[0-9]{2}-[0-9]{2}[\s]+[0-9]{2}:[0-9]{2}:[0-9]{2}[\s]+ " por uma string vazia. Parece melhor. Mas depois perco as informações sobre a data e o horário dos comandos:

    1  2018-06-13   18:10:15    foo
    2  2018-06-13   18:10:15    bar
    3  2018-06-13   18:10:15    buz

Como importar o histórico e manter as meta-informações de data e hora?

    
por automatix 13.06.2018 / 18:31

2 respostas

1

A saída de history é para você ler. Na verdade, se você olhar para o seu arquivo ~/.bash_history , você encontrará algo como

#1528908193
history
#1528908354
vim .bash_history 
#1528908359
history
#1528908591
man history
#1528908594

Então é assim que os timestamps são armazenados.

Igual ao DopeGhoti, porque não scp?

    
por 13.06.2018 / 18:55
0

@Charles Muito obrigado pela dica valiosa ! Isso me leva à solução.

Para manipular a data e o horário das entradas do histórico bash, basta substituir o ~/.bash_history por um arquivo bruto formatado corretamente. O formato correto para uma entrada é

#TIMESTAMP
command

Então, no meu caso, precisei seguir os seguintes passos:

(passo 0: exportar o histórico para um arquivo de texto: history > history.txt .)

etapa 1: abra o arquivo em um editor de texto e limpe o arquivo. O resultado deve ser que cada linha consiste em date + space time + tab + command . Como no meu caso as entradas foram formatadas como %F%t%T%t , eu precisava dessa substituição baseada em regex:

FROM: ^([\s]+[0-9]+[\s]+)([0-9]{4}-[0-9]{2}-[0-9]{2})[\s]+([0-9]{2}:[0-9]{2}:[0-9]{2}[\s]+)
TO: $2 $3

etapa 2: copie o resultado para o Calc (ou Excel). Agora temos duas colunas.

etapa 3: converta os valores na coluna data e hora para os registros de data e hora:

=(A1 - DATEVALUE("1/1/1970"))*86400

etapa 4: copie as colunas com os carimbos de data e hora e os comandos de volta ao editor de texto.

etapa 5: converta o resultado para o formato de destino:

FROM: ^([0-9]{10})\t
TO: #$1\n

etapa 6: substitua o ~/.bash_history pelo arquivo de texto resultante:

$ cp history.txt > ~/.bash_history
    
por 13.06.2018 / 19:34