履歴出力から正確な時刻と日付でbash履歴を取得する方法は?

履歴出力から正確な時刻と日付でbash履歴を取得する方法は?

bashの履歴を含むファイルがあり、新しいコンピュータからコマンドを「インポート」したいと思います。ファイルにはhistory次の形式の出力が含まれていますHISTTIMEFORMAT="%F%t%T%t"

$ history > history.txt

結果は次のとおりです。

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

~/.bash_historyそのファイルの内容に置き換えると、カウンタと日付と時刻がコマンドの一部になります。だから出力は次historyのようになります

    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

インポート前にコマンドのリストをクリーンアップしました。テキストエディタで開き、^[\s]+[0-9]+[\s]+[0-9]{4}-[0-9]{2}-[0-9]{2}[\s]+[0-9]{2}:[0-9]{2}:[0-9]{2}[\s]+""を空の文字列に置き換えます。はるかに良く見えます。ただし、コマンドの日時に関する情報は失われます。

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

履歴を取得し、日付と時刻のメタ情報を保存する方法は?

答え1

出力historyはあなたが読むことができます。実際にファイルを見ると、~/.bash_history次のようなものが見つかります。

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

これがタイムスタンプが保存される方法です。

DopeGhotiのようにscpはできませんか?

答え2

@チャールズ本当にありがとう貴重なヒント!それは私を解決策に導きます。

Bash 履歴項目の日付と時刻を操作するには、その項目を~/.bash_history正しい形式の元のファイルに置き換えます。項目の正しい形式は次のとおりです。

#TIMESTAMP
command

したがって、私の場合は、次の手順を実行する必要があります。

(ステップ0:履歴をテキストファイルにエクスポートする:history > history.txt.)

ステップ1:テキストエディタでファイルを開き、ファイルをクリーンアップします。その結果、すべての行にdate+ space time+ tab+を含める必要がありますcommand。私の場合はアイテムの形式なので、%F%t%T%t次の正規表現ベースの置換が必要です。

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

ステップ2:結果をCalc(またはExcel)にコピーします。今、2つの列があります。

ステップ3:日付と時刻の列の値をタイムスタンプに変換します。

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

ステップ4:タイムスタンプとコマンドを含む列をテキストエディタにコピーし直します。

ステップ5:結果をターゲット形式に変換します。

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

ステップ6:~/.bash_history結果のテキストファイルを次に置き換えます。

$ cp history.txt > ~/.bash_history

関連情報