Glob Not Match?

How to list files that don't match a glob?

E.g., let's say I have a directory that contains hundreds of files, 97% of which have the filename extension .png.

I know I can list the PNG files with:

ls *.png

But, how do I list the opposite, i.e., just the non-PNG files?


Using ls:

ls -I "*.png"

the quotes are important to stop the shell evaluating the *

Using find:

find . -not -name "*.png"

If you have subdirectories (with files), you may want to limit the search:

find . -maxdepth 1 -type f -not -name "*.png" 

where

  • -maxdepth 1 limits it to the present directory
  • -type f only allows it to print files