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

How can I remove all .swp files in all of my subdirectories under Linux?

share|improve this question

migrated from Feb 22 '10 at 17:08

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

Don't forget to look at programs like trash-cli so you can undelete, instead of using rm. (You'd just replace 'rm' with 'trash' in all of the below answers.) – Roger Pate Feb 22 '10 at 15:10
up vote 62 down vote accepted

Remove all *.swp files underneath the current directory, use the find command in one of the following forms:

  • find . -name \*.swp -type f -delete

    The -delete option means find will directly delete the matching files. This is the best match to OP's actual question.

    Using -type f means find will only process files.

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    Option -exec allows find to execute an arbitrary command per file. The first variant will run the command once per file, and the second will run as few commands as possible by replacing {} with as many parameters as possible.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    Piping the output to xargs is used form more complex per-file commands than is possible with -exec. The option -print0 tells find to separate matches with ASCII NULL instead of a newline, and -0 tells xargs to expect NULL-separated input. This makes the pipe construct safe for filenames containing whitespace.

See man find for more details and examples.

share|improve this answer

find . -name '*.swp' -delete

Having find do the delete itself remove any risk for space embedded in filename, ... For extra security also consider adding -type f for files only.

share|improve this answer

For searching under my home directory (and using the GNU 'find' and 'xargs'), I'd use:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

The use of '-print0' and '-0' means that the names will be delimited by ASCII NUL '\0' characters, and this will handle file paths with blanks etc in the names. If you think you might have directories (or device files, or FIFOs, or other non-files) under your directory ending with '.swp', you could add the '-type f' option to 'find'. If you only have directories, the command above will fail to remove them noisily.

share|improve this answer
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
share|improve this answer

Your Answer


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

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