Hello,
Some time ago I've sent a patch that add switch -1 (number one, not letter ell)
to command ls that lists passwords one per line using find. I attach modified
version that also add switch -1 to search command. Unfortunately it only accept
one term when searching, so
pass search -1 foo
works, but
pass search -1 foo bar
will search only for foo
This could be fixed by using
find -iregex
and I made it to work on FreeBSD with find -E, but GNU find does not understand
-E option
Anyway hope it will be useful.
--
//Serpent7776
diff --git a/src/password-store.sh b/src/password-store.sh
index c85cc33..a5064a3 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -228,9 +228,9 @@ cmd_usage() {
$PROGRAM init [--path=subfolder,-p subfolder] gpg-id...
Initialize new password storage and use gpg-id for encryption.
Selectively reencrypt existing passwords using new gpg-id.
- $PROGRAM [ls] [subfolder]
+ $PROGRAM [ls] [-1] [subfolder]
List passwords.
- $PROGRAM find pass-names...
+ $PROGRAM find [-1] pass-names...
List passwords that match pass-names.
$PROGRAM [show] [--clip,-c] pass-name
Show existing password and optionally put it on the clipboard.
@@ -304,16 +304,17 @@ cmd_init() {
}
cmd_show() {
- local opts clip=0
- opts="$($GETOPT -o c -l clip -n "$PROGRAM" -- "$@")"
+ local opts clip=0 one_per_row=0
+ opts="$($GETOPT -o c -l clip -o 1 -n "$PROGRAM" -- "$@")"
local err=$?
eval set -- "$opts"
while true; do case $1 in
-c|--clip) clip=1; shift ;;
+ -1) one_per_row=1; shift ;;
--) shift; break ;;
esac done
- [[ $err -ne 0 ]] && die "Usage: $PROGRAM $COMMAND [--clip,-c] [pass-name]"
+ [[ $err -ne 0 ]] && die "Usage: $PROGRAM $COMMAND [--clip,-c,-1] [pass-name]"
local path="$1"
local passfile="$PREFIX/$path.gpg"
@@ -327,12 +328,19 @@ cmd_show() {
clip "$pass" "$path"
fi
elif [[ -d $PREFIX/$path ]]; then
- if [[ -z $path ]]; then
- echo "Password Store"
+ if [[ $one_per_row -eq 0 ]]; then
+ if [[ -z $path ]]; then
+ echo "Password Store"
+ else
+ echo "${path%\/}"
+ fi
+ tree -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed 's/\.gpg$//'
else
- echo "${path%\/}"
+ if [[ -z "$path" ]]; then
+ path="."
+ fi
+ ( cd $PREFIX && find $path/ -type f -iname \*.gpg | sed -e 's/\.gpg$//' -e 's/\.\///' )
fi
- tree -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed 's/\.gpg$//'
elif [[ -z $path ]]; then
die "Error: password store is empty. Try \"pass init\"."
else
@@ -341,10 +349,24 @@ cmd_show() {
}
cmd_find() {
- [[ -z "$@" ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
- IFS="," eval 'echo "Search Terms: $*"'
- local terms="*$(printf '%s*|*' "$@")"
- tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed 's/\.gpg$//'
+ local opts one_per_row=0
+ opts="$($GETOPT -o 1 -n "$PROGRAM" -- "$@")"
+ local err=$?
+ eval set -- "$opts"
+ while true; do case $1 in
+ -1) one_per_row=1; shift ;;
+ --) shift; break ;;
+ esac done
+
+ [[ -z "$@" ]] && die "Usage: $PROGRAM $COMMAND [-1] pass-names..."
+ if [[ $one_per_row -eq 0 ]]; then
+ IFS="," eval 'echo "Search Terms: $*"'
+ local terms="*$(printf '%s*|*' "$@")"
+ tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed 's/\.gpg$//'
+ else
+ local terms=$1
+ ( cd $PREFIX && find ./ -ipath "*${terms%|}*" -type f | sed -e 's/\.gpg$//' -e 's/\.\///' )
+ fi
}
cmd_grep() {
_______________________________________________
Password-Store mailing list
[email protected]
http://lists.zx2c4.com/mailman/listinfo/password-store