Bash: What's the difference between "rm -d" and "rm -R"?

caleb531 picture caleb531 · Aug 15, 2012 · Viewed 11.2k times · Source

Questions

  • What is the difference between the rm -d and rm -R commands in Bash?
  • Which one should I use?

Details

According to the man page for the rm command:

  • rm -d attempts to remove directories as well as other types of files.
  • rm -R attempts to remove the file hierarchy rooted in each file argument. The -R option implies the -d option.

Now, I am aware of that last statement (-R implies -d), which may seem to answer my question. However, I still wonder why both command flags exist in the first place, if they are supposedly identical in what they do.

Furthermore, because I am still in the process of learning Bash, I think it's good to know which option is the preferred choice among Bash programmers (conventionally), and why.

Answer

chepner picture chepner · Aug 15, 2012

Ordinarily, rm will not remove a directory, even if it is empty. rm -d just makes rm act like rmdir. It still refuses to remove the directory if it isn't empty, but will do so if it is empty.

rm -R is the full recursive delete, removing the directory and all its contents.

I've never used -d, as I didn't know it existed and always just use rmdir. I'd use rmdir/rm -d if you only want to remove the directory if it is, in fact, empty. Save rm -R for when you are fully aware that you are trying to remove a directory and all its contents.