search_dir=/tmp/test
include_subdir=1
if [ $include_subdir -eq 1 ]; then
n=$(find $search_dir -type f -exec sh -c 'printf "%s\n" "$1"; kill "$PPID"' sh {} \; | grep -v "Terminated" | wc -l)
else
n=$(find $search_dir -maxdepth 1 -type f -exec sh -c 'printf "%s\n" "$1"; kill "$PPID"' sh {} \; | grep -v "Terminated" | wc -l)
fi
结果 n 为 0 表示指定目录下面没有文件,否则有文件。如果不需要检查指定目录下的子目录,把 include_subdir 置为 0 即可。find 命令中较复杂的那部分是为了实现找到第一个文件时就停止查找,避免检查有大量文件的目录时影响性能。