Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Possible Duplicate:
Remove all files but one with rm

In unix, to remove zip files in a directory one can simply type

rm *.zip

How can one remove everything except zip files?

share|improve this question

marked as duplicate by Ignacio Vazquez-Abrams, Troggy Jan 17 '11 at 4:11

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

up vote 5 down vote accepted
rm !(*.zip)

This appears to work. The ! represents "not".

extglob needs to be enabled in the shell behavior settings for this to work. It is probably already enabled... but if not, enable it with:

shopt -s extglob

And after answering this... indeed Ignacio Vazquez-Abrams you are correct. It is pretty much duplicate.

share|improve this answer
Thank you for adding the mention of extglob! I was able to run this command in the normal interactive prompt without a hitch, but then when trying something like echo !(*.zip) in a script, I would always get a syntax error. Adding that option fixed it! – eacousineau May 4 '14 at 13:57

Try creating a list then removing the file from the list.


ls $yourDir | grep -v .zip > deleteThis.list

the call

xargs rm < deleteThis.list

share|improve this answer
Why not just rm $(ls | grep -v *.zip) ? :) – John T Jan 17 '11 at 4:02
There's that too! :) – Dan M. Jan 17 '11 at 16:28

Not the answer you're looking for? Browse other questions tagged or ask your own question.