MyTetra Share
Делитесь знаниями!
Linux / Unix: Find and Delete All Empty Directories & Files
Время создания: 23.01.2018 10:58
Автор: Vivek Gite
Текстовые метки: linux find delete directory dir file
Раздел: Linux
Запись: Velonski/mytetra-database/master/base/151668712258j6te31qv/text.html на raw.githubusercontent.com

How do I find out all empty files and directories on a 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. 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 using BSD or GNU find command:


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

Find and delete all empty files:


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

Delete empty directories

In this example, delete empty directories from ~/Downloads/


find ~/Downloads/ -empty -type d -delete

Delete empty files

In this example, delete empty files from ~/Downloads/


find ~/Downloads/ -empty -type -f -delete

Sample session:
Fig.01: Delete empty directories and files.

How to count all empty files or directories?

The syntax is as follows:


## count empty dirs only ##

find /path/ -empty -type d | wc -l

 

## count empty files only ##

find /path/ -empty -type f | wc -l

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.

This is useful when you need to clean up empty directories and files in a single command.

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

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


## 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 "{}" \;

See man pages – find(1),rmdir(1),xargs(1)

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования