407

From a terminal window:

When I use the rm command it can only remove files.
When I use the rmdir command it only removes empty folders.

If I have a directory nested with files and folders within folders with files and so on, is there a way to delete all the files and folders without all the strenuous command typing?

If it makes a difference, I am using the Mac Bash shell from a terminal, not Microsoft DOS or Linux.

Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
  • 1
    Just in case you wish to restore the files in future , don't use "rm" for such cases . Use "rm-trash" : https://github.com/nateshmbhat/rm-trash – Natesh bhat Nov 20 '18 at 14:27

4 Answers4

912
rm -rf some_dir

-r "recursive" -f "force" (suppress confirmation messages)

Be careful!

Jim Lewis
  • 41,827
  • 6
  • 83
  • 95
77
rm -rf *

Would remove everything (folders & files) in the current directory.

But be careful! Only execute this command if you are absolutely sure, that you are in the right directory.

Prine
  • 11,754
  • 8
  • 38
  • 59
18

Yes, there is. The -r option tells rm to be recursive, and remove the entire file hierarchy rooted at its arguments; in other words, if given a directory, it will remove all of its contents and then perform what is effectively an rmdir.

The other two options you should know are -i and -f. -i stands for interactive; it makes rm prompt you before deleting each and every file. -f stands for force; it goes ahead and deletes everything without asking. -i is safer, but -f is faster; only use it if you're absolutely sure you're deleting the right thing. You can specify these with -r or not; it's an independent setting.

And as usual, you can combine switches: rm -r -i is just rm -ri, and rm -r -f is rm -rf.

Also note that what you're learning applies to bash on every Unix OS: OS X, Linux, FreeBSD, etc. In fact, rm's syntax is the same in pretty much every shell on every Unix OS. OS X, under the hood, is really a BSD Unix system.

Antal Spector-Zabusky
  • 35,571
  • 6
  • 77
  • 137
  • 1
    Although all the options mentioned above are standard among all the Unix flavors listed, there are some differences too. For example, OS X (but not Linux) has `"rm -d"`, which removes either files or empty directories. Still, +1 for the point that OS X is BSD internally. – David Gelhar Apr 15 '10 at 01:44
  • True---the *POSIX subset* is (pretty much) guaranteed to work consistently across Unixen, but anything outside that may or may not. – Antal Spector-Zabusky Apr 15 '10 at 02:11
4

I was looking for a way to remove all files in a directory except for some directories, and files, I wanted to keep around. I devised a way to do it using find:

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

Essentially it uses regex to select the directories to exclude from the results then removes the remaining files.

Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
msantoro12
  • 126
  • 4