Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I need to delete all files, except one (its name is defined), from a given directory.

How can I do this from the terminal in OS X? Can I do this with one single command?

share|improve this question

migrated from stackoverflow.com May 31 '12 at 8:40

This question came from our site for professional and enthusiast programmers.

2 Answers 2

up vote 5 down vote accepted
shopt -s extglob && rm !(non_delete_file)


rm -f !(non_delete_file)


find . ! -name non_delete_file -delete

Note that the above find command will work recursively -- it will delete all files and directories in the current directory, and in all subdirectories. If that is a problem, use -type f (to match only files) and -maxdepth 1 (to match things only in the current directory, ignoring subdirectories)

find . -type f -maxdepth 1 ! -name non_delete_file -delete
share|improve this answer
+1, you arrived just a second before me with find command :) –  DonCallisto May 30 '12 at 8:00
@DonCallisto, sorry, i don't know, next time i'll wait you :) –  shk May 30 '12 at 8:02


rm `ls | grep -v '^defined$'`
share|improve this answer
And what about not_defined? –  Ignacio Vazquez-Abrams May 30 '12 at 7:58
Fixed with anchors. –  Christian Varga May 30 '12 at 8:00
Don't parse ls (this answer will specifically break on files with spaces in their names). you could use printf %s\\n * instead of ls for more reliability (though that will still break on files with newlines in their names...) –  evilsoup Jul 31 '13 at 18:30

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.