if find "${DIR}" -prune ! -empty -exit 1; then
echo Empty
else
echo Not Empty
fi
EDIT : Je pense que cette solution fonctionne bien avec gnu find, après un rapide regard sur la implémentation . Mais cela peut ne pas fonctionner avec, par exemple, netbsd’s find . En effet, celui-ci utilise le champ st_size de stat(2). Le manuel le décrit ainsi :
st_size The size of the file in bytes. The meaning of the size
reported for a directory is file system dependent.
Some file systems (e.g. FFS) return the total size used
for the directory metadata, possibly including free
slots; others (notably ZFS) return the number of
entries in the directory. Some may also return other
things or always report zero.
Une meilleure solution, également plus simple, est :
if find "${DIR}" -mindepth 1 -exit 1; then
echo Empty
else
echo Not Empty
fi
Aussi, le -prune dans la 1ère solution est inutile.
EDIT : no -exit for gnu find… la solution ci-dessus est bonne pour la find de NetBSD. Pour GNU find, cela devrait fonctionner :
if [-z "`find \"${DIR}\" -mindepth 1 -exec echo notempty \; -quit`"]; then
echo Empty
else
echo Not Empty
fi