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