4

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?

ma11hew28
  • 799
  • 2
  • 9
  • 17

1 Answers1

6

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
Jay
  • 6,544
  • 25
  • 34
  • Hmm.. I get `ls: illegal option -- I` on Mac OS X 10.8. But using `find` works. So, thanks! :) – ma11hew28 Jul 11 '12 at 23:31
  • Interesting, I have no experience with Mac so I can't help there I'm afraid. If this answered your question, though, please can you accept it by pressing the hollow tick next to the answer. Thanks :-) – Jay Jul 11 '12 at 23:38