Skip to content

Instantly share code, notes, and snippets.

@muendelezaji
Forked from op/bash-history-to-zsh-history.py
Created October 5, 2016 14:18
Show Gist options
  • Save muendelezaji/c14722ab66b505a49861b8a74e52b274 to your computer and use it in GitHub Desktop.
Save muendelezaji/c14722ab66b505a49861b8a74e52b274 to your computer and use it in GitHub Desktop.
Convert Bash history to Zsh history
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# This is how I used it:
# $ cat ~/.bash_history | python bash-to-zsh-hist.py >> ~/.zsh_history
import sys
import time
def main():
timestamp = None
for line in sys.stdin.readlines():
line = line.rstrip('\n')
if line.startswith('#') and timestamp is None:
t = line[1:]
if t.isdigit():
timestamp = t
continue
else:
sys.stdout.write(': %s:0;%s\n' % (timestamp or time.time(), line))
timestamp = None
if __name__ == '__main__':
main()
@mbency
Copy link

mbency commented Jan 9, 2022

thanks, worked on a new M1 MBP

@devrimbaris
Copy link

Thanks, worked on Catalina with python 2.7.16

@Zackhardtoname
Copy link

To get it to work with hstr, I had to use int(time.time())
Thanks for saving my history!!

@mzpwr
Copy link

mzpwr commented Jun 1, 2022

On WSL had pretty big history and was using HSTR, so after importing the history had 2 problems:

  1. Error zsh: corrupt history file /home/user/.zsh_history
  2. HSTR showing timestamps
    So the solution for me was modified script with thanks to @Zackhardtoname and then several additional steps:
  3. Write date to some other file .zsh_history_tmp
  4. strings .zsh_history_tmp > .zsh_history
  5. fc -R .zsh_history

@Tamas-Toth-ebola
Copy link

Works fine in Ubuntu 22.04, thanks for it!

@muriloloffi
Copy link

Works fine in Linux Mint Debian Edition 5 (LMDE 5). Thank you.

@thizmo
Copy link

thizmo commented Oct 5, 2022

Works fine on RockyLinux 9 (Workstation) with zsh 5.8, ohmyzsh and python3.9.10.
Many thx. Great timesaver!

@johnflan
Copy link

Merci!

@attson
Copy link

attson commented Dec 8, 2022

if zsh_history format is
: 1670471184:0;cat ~/.zsh_history
need use int(time.time()) at line 21

@ZhymabekRoman
Copy link

Thanks!

@dhensen
Copy link

dhensen commented Mar 30, 2023

Thanks

@pedrobartiaga
Copy link

gracias!!!

@anthonyray
Copy link

Worked for me, thanks.

@joseslneto
Copy link

Thanks!!! Helped a lot!

@omkardeekonda
Copy link

Worked like a charm !! Thank you 👍
Wondering why zsh framework doesn't have a feature to import the bash history as part of initial setup. 🤔

@carlosmuller
Copy link

Thank you!!

@desmond1121
Copy link

Thanks!

@kevin-vm
Copy link

Worked perfectly. Thanks

@mmatrosov
Copy link

If you have UnicodeEncodeError:

    lines = []
    with open("/home/mmatrosov/.bash_history", "rb") as f:
        while bytes := f.readline():
            lines.append(bytes.decode("ascii", "backslashreplace"))

@kaiwu-astro
Copy link

hero of my day

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