如何从历史输出中导入具有正确时间和日期的 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

@Charles 非常感谢有价值的提示!它引导我找到解决方案。

为了操作 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)。现在我们有两列。

步骤 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

相关内容