If you're working in emacs (making this platform-agnostic), the following works:
(defun *-delete-empty-directories (root-directory)
"Recursively delete empty directories in ROOT-DIRECTORY.
When called from dired, `dired-current-directory' is used for
ROOT-DIRECTORY."
;; Interface
(interactive (list (if (eq major-mode 'dired-mode)
(expand-file-name (dired-current-directory))
(read-from-minibuffer "Root directory: "))))
(when (or (null root-directory) (string= "" root-directory))
(user-error "No root directory provided"))
(unless (or (notwhen (called-interactively-p) 'interactive)
(unless (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
root-directory)))
(user-error "Directory `%s' has been left untouched" root-directory)))
;; Implementation
(require 'f)
(let ((entries (f-directories root-directory)))
(while entries
(let ((curdir (car entries)))
(when (f-directories curdir)
(*-delete-empty-directories curdir))
(unless (f-entries curdir)
(delete-directory curdir)
(message "Directory deleted: `%s'" curdir))
(setq entries (cdr entries))))))