#!/bin/sh # Export pass store to CSV format on stdout. Version 1 # Use PASSWORD_STORE_DIR environment variable to override location. encode() { # If first argument is 1, then only output the first line. # Encode double-quote character as CSV-escaped "" # Encode newline character as C-escaped \n awk -v onlyfirst="$1" '{ if (length(last) > 0) { if (onlyfirst) exit gsub(/"/, "\"\"", last) printf "%s%cn", last, "\\" } last = $0 } END { if (length(last) > 0) { gsub(/"/, "\"\"", last) printf "%s", last } }' return } PASSWORD_STORE_DIR=${PASSWORD_STORE_DIR:-$HOME/.password-store} fileList=$(mktemp) trap "rm $fileList" 0 cd $PASSWORD_STORE_DIR find . -type f -name '*.gpg' | sed -e 's/^\.\///' | sort >$fileList cd - >/dev/null printf "Name,Password,User1,Url1,Email1,Users,Urls,Emails\n" while read do name=${REPLY%%.gpg} password=$(pass "$name" | encode 1) user1=$(pass "$name" | grep -i -e UserName: -e User: -e Login: | encode 1) users=$(pass "$name" | grep -i -e UserName: -e User: -e Login: | encode) url1=$(pass "$name" | grep -i URL: | encode 1) urls=$(pass "$name" | grep -i URL: | encode) email1=$(pass "$name" | grep -i -e email: -e e-mail: | encode 1) emails=$(pass "$name" | grep -i -e email: -e e-mail: | encode) printf "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n" \ "$name" "$password" "$user1" "$url1" "$email1" "$users" \ "$urls" "$emails" done <$fileList exit