I known several people doing this manually and myself.

This work well with android app too.

Thanks for this cool toy !
---
 src/password-store.sh | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/src/password-store.sh b/src/password-store.sh
index 22e818f..e95802c 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -306,6 +306,8 @@ cmd_usage() {
                Renames or moves old-path to new-path, optionally forcefully, 
selectively reencrypting.
            $PROGRAM cp [--force,-f] old-path new-path
                Copies old-path to new-path, optionally forcefully, selectively 
reencrypting.
+           $PROGRAM ln [--force,-f] old-path new-path
+               Link src-path to dst-path, optionally forcefully.
            $PROGRAM git git-command-args...
                If the password store is a git repository, execute a git command
                specified by git-command-args.
@@ -649,6 +651,39 @@ cmd_copy_move() {
        fi
 }

+cmd_link() {
+       local opts force=0
+       opts="$($GETOPT -o f -l force -n "$PROGRAM" -- "$@")"
+       local err=$?
+       eval set -- "$opts"
+       while true; do case $1 in
+               -f|--force) force=1; shift ;;
+               --) shift; break ;;
+       esac done
+       [[ $# -ne 2 ]] && die "Usage: $PROGRAM $COMMAND [--force,-f] old-path 
new-path"
+       check_sneaky_paths "$@"
+       local src_path="$PREFIX/${1%/}"
+       local src_dir="$src_path"
+       local dst_path="$PREFIX/$2"
+
+       if ! [[ -f $src_path.gpg && -d $src_path && $1 == */ || ! -f 
$src_path.gpg ]]; then
+               src_dir="${src_path%/*}"
+               src_path="${src_path}.gpg"
+       fi
+       echo "$src_path"
+       [[ -e $src_path ]] || die "Error: $1 is not in the password store."
+
+       mkdir -p -v "${dst_path%/*}"
+       [[ -d $src_path || -d $dst_path || $dst_path == */ ]] || 
dst_path="${dst_path}.gpg"
+
+       local interactive="-i"
+       [[ ! -t 0 || $force -eq 1 ]] && interactive="-f"
+
+       set_git "$dst_path"
+       ln -s $interactive -r -v "$src_path" "$dst_path" || exit 1
+       git_add_file "$dst_path" "Link ${1} to ${2}."
+}
+
 cmd_git() {
        set_git "$PREFIX/"
        if [[ $1 == "init" ]]; then
@@ -715,6 +750,7 @@ case "$1" in
        delete|rm|remove) shift;        cmd_delete "$@" ;;
        rename|mv) shift;               cmd_copy_move "move" "$@" ;;
        copy|cp) shift;                 cmd_copy_move "copy" "$@" ;;
+       link|ln) shift;                 cmd_link "$@" ;;
        git) shift;                     cmd_git "$@" ;;
        *)                              cmd_extension_or_show "$@" ;;
 esac
--
2.39.0

Reply via email to