我想测试目录是否不包含任何文件。如果是,我将跳过一些处理。
我尝试了以下操作:
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