如何检查文件夹是否为空或文件夹文件是否使用shell脚本?

fif*_*shi 11 linux shell

我有个问题

我尝试了一些功能

DIR = /路径/ TMP /

if [-d"$ DIR"]; 然后

if [-f"$ DIR"]; 然后

但只检查/ path/tmp这条路径

我能怎么做?

Sie*_*geX 19

Bash FAQ#4 - 如何检查目录是否为空?

shopt -s nullglob dotglob
files=(*)
(( ${#files[*]} )) || echo directory is empty
shopt -u nullglob dotglob
Run Code Online (Sandbox Code Playgroud)

这个小脚本用files路径扩展中的每个文件填充数组*.然后它检查以查看数组的大小,如果它为0则打印'目录为空'.由于使用隐藏文件,这将使用dotglob.

注意

要求解析的答案ls通常是一个坏主意和糟糕的形式.要理解原因,请阅读为什么不应该解析ls的输出

  • 虽然注意到我的答案*不解析`ls`的输出,但是非```解决方案的+1.它只是检查它是否有任何.:-) (2认同)

T.J*_*der 17

你可以使用ls -A这个:

if [ "$(ls -A "$DIR" 2> /dev/null)" == "" ]; then
    # The directory is empty
fi
Run Code Online (Sandbox Code Playgroud)

-A显示所有隐藏文件和目录,除了...是永远存在的,所以这将是在任何文件或子目录的目录空目录和非空白的空白.

2> /dev/null扔掉任何错误信息ls可以打印(注意选中一个不存在的目录会产生假阳性,但你说你已经检查了它的存在).检查您没有读取权限的目录也会产生误报.