Hi again,

I actually revert to my first version and oppose Kjetil's second comment. After some testing I found out that 'pass find $terms' matches pathnames, too.


A mix would be:
find ${PREFIX} -type f -name '*.gpg' | sed -E 's/\.gpg$//' | grep -i "${terms}" | sed -E "s|^${PREFIX}/||" | sort


Regards,
// mem



Den 2022-07-20 kl. 11:53, skrev Magnus Sandberg:
Hi Andreas,

Thanks for adapting my idea, two comments;

- The 'sort' command was added as 'find' list found matches in "random order" (inode order I guess). There are other places in /usr/bin/pass where 'sort' is used. I prefer sort without LC_ALL=C to not force case-sencitive sort.

- I think Kjetil has a good point of removing ${PREFIX} and '.gpg' before the 'grep' to avoid "false positives" when a part of the path (not the filename) would match ${terms}.


An updated version would be:
find ${PREFIX} -type f -name '*.gpg' | sed -E "s|^${PREFIX}/||" \
     | sed -E 's/\.gpg$//' | grep -i "${terms}" | sort


Regards,
// mem



Den 2022-07-20 kl. 10:31, skrev Andreas Kölbl:
Hello,

as I'm unsure, if compatibility is the aim of the project. The commit before on this line aimed to be compatible with tree 2.0 [1]. Since find and grep is already a dependency, sure I provide a version without tree. I adapted the change, left sort out as this could be unintended use and appended suffix-removal after the first command.

There are similar approaches with the aim to be POSIX-compatible [2]. Anyways, I'm unsure if they have the same wiede adoption and mass of compatible clients.

But to allow different behavior here could be a compatible workaround. Any further suggestions are well appreciated.

Kind Regards
Andreas

[1] https://git.zx2c4.com/password-store/commit/?id=eea24967a002a2a81ae9b97a1fe972b5287f3a09
[2] https://github.com/dylanaraps/pash

Am 19.07.22 um 12:06 schrieb Kjetil Torgrim Homme:
On 19/07/2022 11:37, Magnus Sandberg wrote:
Hi,

After a few minutes of manual testing at my shell prompt, I guess this one does the same;

find ${PREFIX} -type f -name '*.gpg' | grep -i "${terms}" \
    | sed -E "s|^${PREFIX}/||" | sed -E 's/\.gpg$//' | sort



Assuming that 'grep -i "${terms}"' would give the same result as
'tree ... -P "${terms%|*}" ...'

I would prefer a version which is not reliant on tree, too. especially since it seems very fragile to try to remove the glyphs used for the tree in the output.  (in fact, on my EL7 box, the version of tree shipped with the distro is incompatible with pass, so I run find(1) manually instead!)

A small point - I think it is better to remove the prefix and .gpg suffix before the grep to avoid unwanted matches (e.g., searching for "home" :)

Reply via email to