Il motivo principale è probabilmente storico. Ai vecchi, vecchi tempi, non c'erano rmdir(2) e mkdir(2) chiamate di sistema (qui stiamo discutendo di 7th Edition UNIX™) e rmdir(1) era (per necessità) un programma root SUID che utilizzava il unlink(2) chiamata di sistema per rimuovere le directory.
I manuali UNIX della settima edizione sono disponibili online all'indirizzo http://cm.bell-labs.com/7thEdMan (ultima verifica 2017-04-23); Sono disponibili anche su http://plan9.bell-labs.com/7thEdMan (ultima verifica 2017-04-23). Sembra esserci anche almeno una fonte alternativa online — http://wolfram.schneider.org/bsd/7thEdManVol2/ — per gli articoli nel Volume 2, con un collegamento al sito di FreeBSD per i comandi e le chiamate di sistema nel Volume 1 .
Il rm comando (un normale programma non SUID) invocava il rmdir(1) comando per rimuovere le directory vuote. Non poteva farlo da solo; che richiedeva i privilegi di root. Quindi, il rmdir(1) Il comando (vedi qui per il suo codice sorgente in Unix V7) esisteva per rimuovere le directory vuote e il rm il comando stesso non ha rimosso le directory vuote.
Per usare rm per rimuovere le directory, devi dare -r opzione.
C'è anche un argomento di simmetria. Hai bisogno di un comando mkdir(1) creare directory; sembra ragionevole avere un comando rmdir(1) per annullare ciò che mkdir(1) fatto. In più sono (di questi tempi) semplici esercitatori del rmdir(2) e mkdir(2) chiamate di sistema — sì, nella settima edizione di UNIX, mkdir(1) era anche un programma root SUID, usando il mknod(2) chiamata per creare un nodo di directory e il link(2) chiamata per creare il . e .. voci nella directory.
"rm" non funziona sulle directory. Devi usare rmdir o specificare l'opzione -r per una cancellazione ricorsiva. Il motivo è storico:unlink e rmdir sono chiamate di sistema separate e risalgono ai primi giorni di Unix.
Inoltre rmdir rimuove solo vuoto directory. Se vuoi assicurarti di non eliminare altri file in una directory, rmdir è più sicuro di rm -r (tranne se hai aliasato rm in modo tale da dover sempre confermare ciò che elimini, ad esempio alias rm='rm -i' in ~/.bashrc o qualunque cosa tu stia usando).