[PATCH v2 0/2] pass {find,ls}: --find: Add flag
Alejandro Colomar
alx at kernel.org
Mon Aug 18 08:43:00 UTC 2025
On Mon, Aug 18, 2025 at 10:37:35AM +0200, Alejandro Colomar wrote:
> Hi!
>
> Here's a revision of the patch set I sent two years ago. I've addressed
> the comments by Tobias. Here's what changes in v2:
>
> - Do not depend on previous patches. This patch set applies on current
> master.
> - Do not print search terms with --find.
> - Minor changes in commit messages.
> - Minor formatting improvements in the manual page changes.
>
> Here's how the additions to the manual page look like after formatting
> (I guess this helps review):
>
> $ export MANWIDTH=64;
> $ diffman-git HEAD;
> --- HEAD^:man/pass.1
> +++ HEAD:man/pass.1
> @@ -71,6 +71,13 @@ COMMANDS
> folder by using the tree(1) program. This command
> is alternatively named list.
>
> + If the --find flag is used, find(1) is used in‐
> + stead; this is useful to be able to reuse the
> + output as an input to pass show. Here's an exam‐
> + ple:
> +
> + $ pass ls --find foo/bar/ | xargs pass show;
> +
> grep [GREPOPTIONS] search-string
> Searches inside each decrypted password file for
> search-string, and displays line containing
> $ diffman-git HEAD^;
> --- HEAD^^:man/pass.1
> +++ HEAD^:man/pass.1
> @@ -79,11 +79,18 @@ COMMANDS
> as-is. (Note: the GREP_OPTIONS environment vari‐
> able functions as well.)
>
> - find pass-names...
> + find [ --find ] pass-names...
> List names of passwords inside the tree that
> match pass-names by using the tree(1) program.
> This command is alternatively named search.
>
> + If the --find flag is used, find(1) is used in‐
> + stead; this is useful to be able to reuse the
> + output as an input to pass ls. Here's an exam‐
> + ple:
> +
> + $ pass find --find | xargs pass ls;
Oops, I should have written
$ pass find --find foo | xargs pass ls
> +
> show [ --clip[=line-number], -c[line-number] ] [ --qr‐
> code[=line-number], -q[line-number] ] pass-name
> Decrypt and print a password named pass-name. If
>
> Below you can find a range-diff.
>
>
> Have a lovely day!
> Alex
>
>
> Alejandro Colomar (2):
> pass find: --find: Add flag
> pass ls: --find: Add flag
>
> man/pass.1 | 32 +++++++++++++++++++++++++++++++-
> src/password-store.sh | 40 ++++++++++++++++++++++++++++++++--------
> 2 files changed, 63 insertions(+), 9 deletions(-)
>
> Range-diff against v1:
> 1: ea93997 ! 1: 8562aaa pass find: Add --find flag
> @@ Metadata
> Author: Alejandro Colomar <alx at kernel.org>
>
> ## Commit message ##
> - pass find: Add --find flag
> + pass find: --find: Add flag
>
> This flag modifies the command to use find(1) instead of tree(1).
>
> @@ Commit message
> (3) Remove the .gpg suffix from files (as is historic behavior of
> pass(1)).
>
> + As this is intended for scripting (machine readable output), the search
> + terms are not printed if this flag is used.
> +
> Examples of use:
>
> $ pass find --find bugzilla
> - Search Terms: bugzilla
> www/foss/kernel/bugzilla/
> www/foss/mozilla/bugzilla/
> www/foss/gentoo/bugzilla/
> www/foss/gnu/gcc/bugzilla/
>
> $ pass find --find kernel
> - Search Terms: kernel
> www/foss/kernel/
>
> Those tweaks to the output of find(1) make the output directly usable in
> a subsequent invocation of pass(1):
>
> $ pass find --find kernel \
> - | tail -n -1 \
> - | xargs pass show;
> + | xargs pass ls;
> www/foss/kernel
> ├── bugzilla
> │ ├── alx.manpages
> @@ Commit message
> └── smtp
> └── pass
>
> - The tail(1) above is to hide the search terms.
> -
> + Cc: Tobias Girstmair <t-lists at girst.at>
> + Cc: Fabian Pflug <fabian.pflug at gummu.de>
> Signed-off-by: Alejandro Colomar <alx at kernel.org>
>
> ## man/pass.1 ##
> @@ man/pass.1: .SH COMMANDS
> - as-is.
> - (Note: the \fIGREP_OPTIONS\fP environment variable functions as well.)
> + .BR grep (1)
> + as-is. (Note: the \fIGREP_OPTIONS\fP environment variable functions as well.)
> .TP
> -\fBfind\fP \fIpass-names\fP...
> +\fBfind\fP [ \fI\-\-find\fP ] \fIpass-names\fP...
> List names of passwords inside the tree that match \fIpass-names\fP by using the
> .BR tree (1)
> - program.
> - This command is alternatively named \fBsearch\fP.
> + program. This command is alternatively named \fBsearch\fP.
> ++.IP
> +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 ls" .
> ++.IR pass\~ls .
> +Here's an example:
> +.IP
> +.in +4n
> +.EX
> -+$ pass find \-\-find foo | tail \-n \-1 | xargs pass ls
> ++.RB $\~ "pass find \-\-find | xargs pass ls" ;
> +.EE
> +.in
> .TP
> - \fBshow\fP [ \fI\-\-clip\fP[=\fIline-number\fP], \fI\-c\fP[\fIline-number\fP] ] [ \fI\-\-qrcode\fP[=\fIline-number\fP], \fI\-q\fP[\fIline-number\fP] ] \fIpass-name\fP
> - Decrypt and print a password named \fIpass-name\fP.
> + \fBshow\fP [ \fI--clip\fP[=\fIline-number\fP], \fI-c\fP[\fIline-number\fP] ] [ \fI--qrcode\fP[=\fIline-number\fP], \fI-q\fP[\fIline-number\fP] ] \fIpass-name\fP
> + Decrypt and print a password named \fIpass-name\fP. If \fI--clip\fP or \fI-c\fP
>
> ## src/password-store.sh ##
> @@ src/password-store.sh: cmd_show() {
> @@ src/password-store.sh: cmd_show() {
> + esac done
> +
> [[ $# -eq 0 ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
> - IFS="," eval 'echo "Search Terms: $*"'
> +- IFS="," eval 'echo "Search Terms: $*"'
> local terms="*$(printf '%s*|*' "$@")"
> - tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" 3>&- | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
> +
> @@ src/password-store.sh: cmd_show() {
> +
> + find -L "$PREFIX" -iname "${terms%|*}" | sed 's,$,/,' | sed "s/^.\{$n\}//" | sed 's,\.gpg/$,,'
> + else
> ++ IFS="," eval 'echo "Search Terms: $*"'
> + tree -N -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" 3>&- | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
> + fi
> }
> 2: 972dcbb ! 2: 1a5b0a2 pass ls: Add --find flag
> @@ Metadata
> Author: Alejandro Colomar <alx at kernel.org>
>
> ## Commit message ##
> - pass ls: Add --find flag
> + pass ls: --find: Add flag
>
> Similarly to `pass find --find`, this flag changes the `pass ls` command
> to use find(1) instead of tree(1).
> @@ Commit message
> Examples of use:
>
> $ pass find --find kernel \
> - | tail -n -1 \
> - | xargs ./password-store.sh ls --find;
> + | xargs pass ls --find;
> www/foss/kernel/
> www/foss/kernel/smtp/
> www/foss/kernel/smtp/pass
> @@ Commit message
> www/foss/kernel/bugzilla/alx/pass
>
> $ pass find --find kernel \
> - | tail -n -1 \
> | xargs pass ls --find \
> - | tail -n1 \
> | xargs pass show;
> pw
>
> + Cc: Tobias Girstmair <t-lists at girst.at>
> + Cc: Fabian Pflug <fabian.pflug at gummu.de>
> Signed-off-by: Alejandro Colomar <alx at kernel.org>
>
> ## man/pass.1 ##
> @@ man/pass.1: .SH COMMANDS
> + by using the
> .BR tree (1)
> - program.
> - This command is alternatively named \fBlist\fP.
> + program. This command is alternatively named \fBlist\fP.
> ++.IP
> +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" .
> ++.IR pass\~show .
> +Here's an example:
> +.IP
> +.in +4n
> +.EX
> -+$ pass ls \-\-find foo/bar/ | tail \-n1 | xargs pass show
> ++.RB $\~ "pass ls \-\-find foo/bar/ | xargs pass show" ;
> +.EE
> +.in
> -+.TP
> .TP
> \fBgrep\fP [\fIGREPOPTIONS\fP] \fIsearch-string\fP
> Searches inside each decrypted password file for \fIsearch-string\fP, and displays line
> --
> 2.50.1
>
--
<https://www.alejandro-colomar.es/>
-------------- 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/20250818/52481aa0/attachment.sig>
More information about the Password-Store
mailing list