Finding files not ending with specific extensions

2019-07-14 19:47发布

问题:

I'm making a bash script; how do I find files not ending with specific extensions?

#!/bin/bash
find . -type f -print | grep "\.\(?!psd\|xcf\).+$"

Thank you.

回答1:

You can use:

find . -regextype posix-egrep -type f ! -regex '.*\.(psd|xcf)$'

Or without regex:

find . -type f -not \( -name '*.psd' -o -name '*.xcf' \)


回答2:

You can use -v grep param like this:

find . -type f -print | grep -v "${NOT_PATTERN}"

So, in your case you can use:

find . -type f -print | grep -v "\.\(psd|xcf\)$"

Documentation

-v, --invert-match Invert the sense of matching, to select non-matching lines.