Search code examples
bashterminalrm

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


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.


Solution

  • 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.