On Mon, Sep 25, 2023 at 12:47:29AM +0200, Alejandro Colomar wrote: > Similarly to `pass find --find`, this flag changes the `pass ls` command > to use find(1) instead of tree(1). > > With this flag, the output is directly usable in a subsequent call to > `pass show`. > > Examples of use: > > $ pass find --find kernel \ > | tail -n -1 \ > | xargs ./password-store.sh ls --find; > www/foss/kernel/ > www/foss/kernel/smtp/ > www/foss/kernel/smtp/pass > www/foss/kernel/bugzilla/ > www/foss/kernel/bugzilla/url > www/foss/kernel/bugzilla/alx/ > www/foss/kernel/bugzilla/alx/id > www/foss/kernel/bugzilla/alx/pass > > $ pass find --find kernel \ > | tail -n -1 \ > | xargs pass ls --find \ > | tail -n1 \ > | xargs pass show; > pw > > Signed-off-by: Alejandro Colomar <[email protected]> > --- > > And here's a patch for pass ls. These patches apply on top of the > formatting fixes for the manual page that I sent earlier. > > Cheers, > Alex > > man/pass.1 | 15 +++++++++++++++ > src/password-store.sh | 20 ++++++++++++++------ > 2 files changed, 29 insertions(+), 6 deletions(-) > > diff --git a/man/pass.1 b/man/pass.1 > index b9764c5..2f4d858 100644 > --- a/man/pass.1 > +++ b/man/pass.1 > @@ -92,6 +92,21 @@ .SH COMMANDS > .BR tree (1) > program. > This command is alternatively named \fBlist\fP. > +If the > +.I \-\-find > +flag is used, > +.BR find (1) > +is used instead; > +this is useful to be able to reuse the output as an input to > +.IR "pass show" . > +Here's an example: > +.IP > +.in +4n > +.EX > +$ pass ls \-\-find foo/bar/ | tail \-n1 | xargs pass show > +.EE > +.in > +.TP
Oops, I accidentally duplicated the .TP.
> .TP
> \fBgrep\fP [\fIGREPOPTIONS\fP] \fIsearch-string\fP
> Searches inside each decrypted password file for \fIsearch-string\fP, and
> displays line
> diff --git a/src/password-store.sh b/src/password-store.sh
> index bf0e446..966c245 100755
> --- a/src/password-store.sh
> +++ b/src/password-store.sh
> @@ -366,11 +366,12 @@ cmd_init() {
> }
>
> cmd_show() {
> - local opts selected_line clip=0 qrcode=0
> - opts="$($GETOPT -o q::c:: -l qrcode::,clip:: -n "$PROGRAM" -- "$@")"
> + local opts selected_line clip=0 find=0 qrcode=0
> + opts="$($GETOPT -o q::c:: -l qrcode::,clip::,find -n "$PROGRAM" --
> "$@")"
> local err=$?
> eval set -- "$opts"
> while true; do case $1 in
> + --find) find=1; shift ;;
> -q|--qrcode) qrcode=1; selected_line="${2:-1}"; shift 2 ;;
> -c|--clip) clip=1; selected_line="${2:-1}"; shift 2 ;;
> --) shift; break ;;
> @@ -397,12 +398,19 @@ cmd_show() {
> fi
> fi
> elif [[ -d $PREFIX/$path ]]; then
> - if [[ -z $path ]]; then
> - echo "Password Store"
> + if [[ $find -eq 1 ]]; then
> + local n="$(echo "$PREFIX" | wc -c)"
> +
> + find -L "$PREFIX/$path" | sed '/[^\/]$/s,$,/,' | sed
> "s/^.\{$n\}//" | sed 's,\.gpg/$,,'
> else
> - echo "${path%\/}"
> + if [[ -z $path ]]; then
> + echo "Password Store"
> + else
> + echo "${path%\/}"
> + fi
> +
> + tree -N -C -l --noreport "$PREFIX/$path" 3>&- | tail -n
> +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of
> line, but keep colors
> fi
> - tree -N -C -l --noreport "$PREFIX/$path" 3>&- | tail -n +2 |
> sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line,
> but keep colors
> elif [[ -z $path ]]; then
> die "Error: password store is empty. Try \"pass init\"."
> else
> --
> 2.40.1
>
signature.asc
Description: PGP signature
