如何检查目录是否包含子目录?

Dav*_*ave 7 unix bash scripting

使用bash,如何编写if语句来检查存储在名为"$ DIR"的脚本变量中的某个目录是否包含不是"."的子目录.要么 ".."?

谢谢, - 戴夫

AlG*_*AlG 11

这是一种方式:

#!/usr/bin/bash
subdircount=`find /d/temp/ -maxdepth 1 -type d | wc -l`

if [ $subdircount -eq 2 ]
then
    echo "none of interest"
else
    echo "something is in there"
fi
Run Code Online (Sandbox Code Playgroud)

  • @AI G当我尝试上面的`find`命令时,如果没有子文件夹,它返回文件夹路径`/ d/temp`.`./`和`../`没算了. (2认同)

rob*_*ert 8

这是一个更简约的解决方案,它将在一行中执行测试。

ls $DIR/*/ >/dev/null 2>&1 ; 

if [ $? == 0 ]; 
then 
  echo Subdirs
else 
  echo No-subdirs
fi
Run Code Online (Sandbox Code Playgroud)

通过将通配符放在/后面,*您仅选择目录,因此,如果没有目录,则ls返回错误状态2并输出消息ls: cannot access <dir>/*/: No such file or directory。在2>&1捕获标准错误和管道入标准输出,然后一大堆得到管道输送到(这摆脱了常规的LS输出过,当有文件)。