Skip to content

Instantly share code, notes, and snippets.

@goyalankit
Last active October 28, 2023 05:07
Show Gist options
  • Save goyalankit/a1c88bfc69107f93cda1 to your computer and use it in GitHub Desktop.
Save goyalankit/a1c88bfc69107f93cda1 to your computer and use it in GitHub Desktop.
Import bash history to zsh history.
#################################################################
# = This script transfers bash history to zsh history
# = Change bash and zsh history files, if you don't use defaults
#
# = Usage: ruby bash_to_zsh_history.rb
#
# = Author: Ankit Goyal
#################################################################
# change if you don't use default values
BASH_HISTORY_FILE_PATH="#{ENV['HOME']}/.bash_history"
ZSH_HISTORY_FILE_PATH="#{ENV['HOME']}/.zsh_history"
# Read the bash history file
bash_hist_file = File.read(BASH_HISTORY_FILE_PATH)
# Get the list of commands from bash history hile
command_list = bash_hist_file.split("\n")
# Open the zsh history file
zsh_hist_file = File.open(ZSH_HISTORY_FILE_PATH, "a")
# Get timestamp required for zsh history file format and update the history file
time = Time.now.to_i
command_list.each do |command|
time += 1
zsh_hist_file.write(": #{time}:0;#{command}\n")
end
# Close the file
zsh_hist_file.close
@frostyandy2k
Copy link

Personally I found awk and PERL to be to heavy weight :) So I went for

cat ~/.bash_history | cut -d' ' -f1- | sort | uniq | xargs -I % echo ": $(date +%s):0;" % >> ~/.zsh_history

This worked like a charm on OSX Catalina from bash to zsh.

@bsa7
Copy link

bsa7 commented Aug 6, 2020

Script is working for me. Ubuntu 20.20. History moved. Thank you!

@JuniorJPDJ
Copy link

Guys ;)
cp ~/.bash_history ~/.zsh_history works
Probably zsh wrote some import from just cmdlines in history

@samypr100
Copy link

Since I didn't see trusty old sed, here's one I made with my friend sed

cat ~/.bash_history | uniq | sed "s/^/\: $(date +%s)\:0;/" >> ~/.zsh_history

@brutoid
Copy link

brutoid commented Jun 18, 2022

Since I didn't see trusty old sed, here's one I made with my friend sed

cat ~/.bash_history | uniq | sed "s/^/\: $(date +%s)\:0;/" >> ~/.zsh_history

Works a treat. Cheers.

@remotelyimin
Copy link

Thanks a lot brother.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment