我.bash_history
通过在 VM 上的快照之间切换生成了多个文件。我想将所有这些文件恢复到.bash_history
我当前运行的实例中的单个实时文件中。
这些文件中有时间戳,我想尽可能地保留它们。但是,看起来有些行上没有时间戳。例如:
#1542817796
vi ~/.bash_profile
set +x
cd -
cd w/Edge-Agent/edge-agent-ged/
make
set -x
man make
make -npq
make -npq .DEFAULT
make
make
ack npq /etc
ack npq /usr/share/
set +x
ack npq /usr/share/
sudo vi /usr/share/bash-completion/completions/make
dv
hg diff
vi ~/.bashrc
#1542826064
ls
#1542826066
vi ~/.bashrc
#1542826074
cd ..
#1542826321
我想按时间戳对合并列表进行排序,因为我在快照之间来回切换,并且文件相互交错。如果命令没有可用的时间戳,我们可以从之前的最后一个时间戳和之后的第一个时间戳推断它。
使用 GNU m4(它支持最多 LONG_MAX 的编号转移)和一些额外
sed
的准备输入:用法:
该
m4_chunk
函数完成了大部分工作,因为当所有输入结束时,单独的块按数字升序“未转移”。脚本的其余部分是保护m4_
输入中的任何引号和现有序列不被m4
.LQ
以及RQ
基于 Michael Breen 的M4 宏语言注释中的定义。为什么不做类似的事情,
cat /path/to/one/.bash_history >> /path/to/live/.bash_history
然后您可以删除重复的条目,awk '!seen[$0]++' .bash_history >> .bash_history2
然后删除原始条目并将 .bash_history2 重命名为 .bash_history。但是,像这样删除重复项会留下空的时间戳。这有帮助吗:
确保将所有历史文件列为
awk
.编辑:一些不令人满意的,不可移植的文章,以保留命令的原始顺序:
.
很长一段时间以来,我一直在寻找一种合并 bash 历史(带有时间戳)的方法,但似乎没有什么可以接受的。
那就是......将磁盘上的“.bash_history”与内存中的shell“历史”合并。在这些时间戳中保留时间戳顺序和命令顺序。
根据定义的 perl RE,可选择删除唯一命令(即使是多行命令)和/或删除(清除)简单和/或敏感命令。调整以适应!
这是结果: https ://antofthy.gitlab.io/software/history_merge.bash.txt
脚本中的第一个“perl”命令只是连接输入历史文件。默认将
"$HISTFILE" <(history -w /dev/stdout)
磁盘历史与内存历史合并,将它们分成时间戳记录。然后第二个“perl”进行合并。它将结果保存在一个临时文件中,该文件可以随意替换磁盘上的历史记录或内存中的历史记录(当前两者都可以)。
调整以适应。
享受