Skip to main content
added 55 characters in body
Source Link
Sean Allred
  • 1.3k
  • 2
  • 13
  • 34

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))))))

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."
  (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 (not (called-interactively-p))
              (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                                   root-directory)))
    (user-error "Directory `%s' has been left untouched" root-directory))
  (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))))))

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"))
  (when (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)))))
added 57 characters in body
Source Link
Sean Allred
  • 1.3k
  • 2
  • 13
  • 34

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 unless a prefix argument is provided."
  (interactive (list (if (and prefix-arg (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 (not (called-interactively-p))
              (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                                   root-directory)))
    (user-error "Directory `%s' has been left untouched" root-directory))
 
  (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))))))

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 unless a prefix argument is provided."
  (interactive (list (if (and prefix-arg (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 (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                               root-directory))
    (user-error "Directory `%s' has been left untouched" root-directory))
 
  (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))
        (setq entries (cdr entries))))))

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."
  (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 (not (called-interactively-p))
              (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                                   root-directory)))
    (user-error "Directory `%s' has been left untouched" root-directory))
  (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))))))
Source Link
Sean Allred
  • 1.3k
  • 2
  • 13
  • 34

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 unless a prefix argument is provided."
  (interactive (list (if (and prefix-arg (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 (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                               root-directory))
    (user-error "Directory `%s' has been left untouched" root-directory))

  (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))
        (setq entries (cdr entries))))))