How do I find all files that do not begin with a g

2020-02-12 09:35发布

问题:

I have a bunch of files in a folder:

foo_1 
foo_2
foo_3
bar_1
bar_2
buzz_1
...

I want to find all the files that do not start with a given prefix and save the list to a text file. Here is an example for the files that do have a given prefix:

find bar_* > Positives.txt

回答1:

This should do the trick in any shell

ls | grep -v '^prefix'

The -v option inverts grep's search logic, making it filter out all matches. Using grep instead of find you can use powerful regular expressions instead of the limited glob patterns.



回答2:

If you're doing subdirectories as well:

find . ! -name "bar_*"


回答3:

You want to find filenames not starting with bar_*?

recursive:

find ! -name 'bar_*' > Negatives.txt

top directory:

find -maxdepth 1 ! -name 'bar_*' > Negatives.txt


回答4:

With extended globs:

shopt -s extglob
ls !(bar_*) > filelist.txt

The !(pattern) matches anything but pattern, so !(bar_*) is any filename that does not start with bar_.



回答5:

Using bash and wildcards: ls [!bar_]*. There is a caveat: the order of the letters is not important, so rab_something.txt will not be listed.



回答6:

In my case I had an extra requirement, the files must end with the .py extension. So I use:

find . -name "*.py" | grep -v prefix_

In your case, to just exclude files with prefix_:

find . | grep -v prefix_

Note that this includes all sub-directories. There are many ways to do this, but it can be easy to remember for those already familiar with find and grep -v which excludes results.