[linux] Find all zero-byte files in directory and subdirectories

How can I find all zero-byte files in a directory and its subdirectories?

I have done this:

#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns; do
    if test $file = "0"; then
        printf $temp"\t"$file"\n"
    fi
    temp=$file
done

But, I only get results in the current directory, not subdirs, and if any file name contains a space then I get only first word followed by tab

This question is related to linux shell

The answer is


Bash 4+ tested - This is the correct way to search for size 0:

find /path/to/dir -size 0 -type f -name "*.xml"

Search for multiple file extensions of size 0:

find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)

Note: If you removed the \( ... \) the results would be all of the files that meet this requirement hence ignoring the size 0.


No, you don't have to bother grep.

find $dir -size 0 ! -name "*.xml"

As addition to the answers above:

If you would like to delete those files

find $dir -size 0 -type f -delete