[PATCH 2/2] pass ls: Add --find flag
Alejandro Colomar
alx at kernel.org
Sun Sep 24 22:57:54 UTC 2023
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 <alx at kernel.org>
> ---
>
> 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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20230925/d3258562/attachment.sig>
More information about the Password-Store
mailing list