Linux / Unix: Find and Delete All Empty Directories / Files

by on October 25, 2012 · 4 comments· LAST UPDATED October 25, 2012

in ,

How do I find out all empty files and directories under Linux / Apple OS X / BSD / Unix like operating systems and delete them in a single pass?

You need to use the combination of find and rm command.

Tutorial details
DifficultyEasy (rss)
Root privilegesMay be required for system files.
Requirementsfind
Estimated completion timeN/A
GNU/find has an option to delete files with -delete option. Please note that Unix / Linux filenames can contain blanks and newlines, this default behaviour is often problematic; filenames containing blanks and/or newlines are incorrectly processed by many utilities including rm command. To avoid problems you need to pass the -print0 option to find command and pass the -0 option to xargs command, which prevents such problems.

WARNING! These examples may crash your computer if executed. Some background process (daemons) may use empty files as a lock files or as default location to lock (chroot) down daemons. Do not delete those files. Usually, located in /var/, /lib/ and other important locations.

Method # 1: Find and delete everything with find command only

The syntax is as follows to find and delete all empty directories:

 
find /path/to/dir -empty -type d -delete
 

Find and delete all empty files:

 
find /path/to/dir -empty -type f -delete
 

Where,

  • -empty : Only find empty files and make sure it is a regular file or a directory.
  • -type d : Only match directories.
  • -type f : Only match files.
  • -delete : Delete files. Always put -delete option at the end of find command as find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the starting points you specified.

Method # 2: Find and delete everything using xargs and rm/rmdir command

The syntax is as follows to find and delete all empty directories:

 
## secure and fast version ###
find /path/to/dir/ -type d -empty -print0 | xargs -0 -I {} /bin/rmdir "{}"
 

OR

## secure but may be slow due to -exec  ##
find /path/to/dir -type d -empty -print0 -exec rmdir -v "{}" \;

The syntax is as follows to delete all empty files:

 
## secure and fast version ###
find /path/to/dir/ -type f -empty -print0 | xargs -0 -I {} /bin/rm "{}"
 

OR

 
## secure but may be slow due to -exec  ##
find . -type f -empty -print0 -exec rm -v "{}" \;
 
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 4 comments… read them below or add one }

1 Scott Carlson October 25, 2012 at 12:26 pm

my pruneEmptyDirs script looks like :

perl -MFile::Find -e”finddepth(sub{rmdir},’.')”

Reply

2 Balakrishnan B October 25, 2012 at 5:47 pm

zsh only
To delete all empty directories

  1. rmdir –ignore-fail-on-non-empty **/*(/)
  2. rmdir **/*(/^F)

Reply

3 AngelVG October 11, 2013 at 3:42 pm

Take care:

If you have the directory /home/ftp/pub
empty, the command

find /home/ftp/pub -type d -empty -exec rm {} ;

deleted the pub directory (i tested this in FreeBSD 9.1)

The solution:

add the option
-depth 1

example

find /home/ftp/pub -depth 1 -type d -empty -exec rm {} ;

For example, for maintain my ftp directory clear (up to 7 days), y have this lines in script /usr/home/backups/scripts/script-del-old.sh with this

#! /bin/sh

# Files
find /usr/home/ftp/pub -atime +1w -exec rm {} ;
echo
# Directories
find /usr/home/ftp/pub -depth 1 -type d -empty -atime +1w -exec rm {} ;

Executions permissions
# chmod +x /usr/home/backups/scripts/script-del-old.sh

and in my cron add

00 01 * * * root /usr/home/backups/scripts/script-del-old.sh

This is all, bye.

Reply

4 AngelVG November 1, 2013 at 4:29 pm

Hi, some correction…

For example, for maintain my ftp directory clear (up to 7 days)
the correct command is

# Files
find /usr/home/invitadoftp/pub -type f -mtime +1w -exec rm {} ;
# Direcories
find /usr/home/invitadoftp/pub -depth 1 -type d -empty -mtime +1w -exec rm {} ;

Please update may older command and delete this

Reply

Leave a Comment

Tagged as: , , , ,

Previous Faq:

Next Faq: