Bash 脚本:测试空目录

Bash 脚本:测试空目录

我想测试目录是否不包含任何文件。如果是,我将跳过一些处理。

我尝试了以下操作:

if [ ./* == "./*" ]; then
    echo "No new file"
    exit 1
fi

这会出现以下错误:

line 1: [: too many arguments

有解决方案/替代方案吗?

答案1

if [ -z "$(ls -A /path/to/dir)" ]; then
   echo "Empty"
else
   echo "Not Empty"
fi

另外,检查一下该目录是否存在也很酷。

ls -A表示列出所有但...

答案2

无需计算任何内容或 shell 全局变量。您还可以read与 结合使用find。如果find的输出为空,您将返回false

if find /some/dir -mindepth 1 -maxdepth 1 | read; then
   echo "dir not empty"
else
   echo "dir empty"
fi

这应该是便携式的。

答案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

答案4

使用 FIND(1)(在 Linux 和 FreeBSD 下),您可以通过“-maxdepth 0”非递归地查看目录条目,并使用“-empty”测试它是否为空。应用于此问题可得出:

if test -n "$(find ./ -maxdepth 0 -empty)" ; then
    echo "No new file"
    exit 1
fi

相关内容