[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