Bash scripting: test for empty directory
Solution 1:
if [ -z "$(ls -A /path/to/dir)" ]; then
echo "Empty"
else
echo "Not Empty"
fi
Also, it would be cool to check if the directory exists before.
p.s.
ls -A means list all but .
or ..
Solution 2:
No need for counting anything or shell globs. You can also use read
in combination with find
. If find
's output is empty, you'll return false
:
if find /some/dir -mindepth 1 -maxdepth 1 | read; then
echo "dir not empty"
else
echo "dir empty"
fi
This should be portable.
Solution 3:
if [ -n "$(find "$DIR_TO_CHECK" -maxdepth 0 -type d -empty 2>/dev/null)" ]; then
echo "Empty directory"
else
echo "Not empty or NOT a directory"
fi
Solution 4:
#!/bin/bash
if [ -d /path/to/dir ]; then
# the directory exists
[ "$(ls -A /path/to/dir)" ] && echo "Not Empty" || echo "Empty"
else
# You could check here if /path/to/dir is a file with [ -f /path/to/dir]
fi