From 7ed0a70aa6d1fd502ff5443bced462d6dedd8511 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 14 Apr 2014 14:59:07 +0200 Subject: find: add find/search command This relies on a patched version of tree to work, unfortunately. Hopefully upstream will accept our patch. Signed-off-by: Jason A. Donenfeld --- src/completion/pass.bash-completion | 2 +- src/completion/pass.fish-completion | 2 ++ src/completion/pass.zsh-completion | 1 + src/password-store.sh | 23 ++++++++++++++++++++++- 4 files changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/completion/pass.bash-completion b/src/completion/pass.bash-completion index d80b186..f7a51e9 100644 --- a/src/completion/pass.bash-completion +++ b/src/completion/pass.bash-completion @@ -57,7 +57,7 @@ _pass() { COMPREPLY=() local cur="${COMP_WORDS[COMP_CWORD]}" - local commands="init ls show insert generate edit rm git help version" + local commands="init ls find show insert generate edit rm git help version" if [[ $COMP_CWORD -gt 1 ]]; then local lastarg="${COMP_WORDS[$COMP_CWORD-1]}" case "${COMP_WORDS[1]}" in diff --git a/src/completion/pass.fish-completion b/src/completion/pass.fish-completion index 5c52ecc..d8f97e2 100644 --- a/src/completion/pass.fish-completion +++ b/src/completion/pass.fish-completion @@ -106,3 +106,5 @@ complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'commit' -d 'Commit complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'push' -d 'Push changes to remote repo' complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'pull' -d 'Pull changes from remote repo' complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'log' -d 'View changelog' + +complete -c $PROG -f -A -n '__fish_pass_needs_command' -a find -d 'Command: find a password file or directory matching pattern' diff --git a/src/completion/pass.zsh-completion b/src/completion/pass.zsh-completion index 7590322..ca983e2 100644 --- a/src/completion/pass.zsh-completion +++ b/src/completion/pass.zsh-completion @@ -77,6 +77,7 @@ _pass () { subcommands=( "init:Initialize new password storage" "ls:List passwords" + "find:Find password files or directories based on pattern" "show:Decrypt and print a password" "insert:Insert a new password" "generate:Generate a new password using pwgen" diff --git a/src/password-store.sh b/src/password-store.sh index a7a5604..706eada 100755 --- a/src/password-store.sh +++ b/src/password-store.sh @@ -43,6 +43,8 @@ usage() { Optionally reencrypt existing passwords using new gpg-id. $program [ls] [subfolder] List passwords. + $program find pass-names... + List passwords that match pass-names. $program [show] [--clip,-c] pass-name Show existing password and optionally put it on the clipboard. If put on the clipboard, it will be cleared in $CLIP_TIME seconds. @@ -71,7 +73,7 @@ usage() { } is_command() { case "$1" in - init|ls|list|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;; + init|ls|list|find|search|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;; *) return 1 ;; esac } @@ -268,6 +270,25 @@ case "$command" in exit 1 fi ;; + find|search) + if [[ -z "$@" ]]; then + echo "Usage: $program $command pass-names..." + exit 1 + fi + if ! tree --help |& grep -q "^ --matchdirs"; then + echo "ERROR: $program: incompatible tree command" + echo + echo "Your version of the tree command is missing the relevent patch to add the" + echo "--matchdirs switch. Please ask your distribution to patch your version of" + echo "tree with:" + echo " http://git.zx2c4.com/password-store/plain/contrib/tree-1.6.0-matchdirs.patch" + echo "Sorry for the inconvenience." + exit 1 + fi + terms="$@" + echo "Search Terms: $terms" + tree -l --noreport -P "*${terms// /*|*}*" --prune --matchdirs "$PREFIX" | tail -n +2 | sed 's/\.gpg$//' + ;; insert) multiline=0 noecho=1 -- cgit v1.2.3-59-g8ed1b