linux获取指定目录最大深度目录层数

发布时间:2019-11-05编辑:脚本学堂
本文介绍了shell脚本获取linux指定目录最大深度(目录层级)的方法,linux shell编程的小例子,需要的朋友参考下。

本节内容:
 linux shell/ target=_blank class=infotextkey>shell脚本获取目录深度、目录层数

shell脚本名:du_folder2.sh
脚本内容:
 

复制代码 代码示例:
#!/bin/sh
if [ -z "$1"  ];then
    echo "no argument";
 exit 255
fi
 
depth_foler()
{
 this_dir=`pwd`
 source_folder="$1"
 source_folder=`echo $source_folder |sed 's#/$##g'`
 test_folder="$2"
 cd $test_folder
 count=0
 while [ ! `pwd` = $source_folder ]
 do
  count=`expr $count + 1` 
 
  cd ..
 done
 cd $this_dir
 return $count 
}
 
#echo $?
target_folder="$1"
depth_max=1
for i in `find "$target_folder" -type d` ;do
 if [ -d $i -a ! $i = $target_folder ];then
  depth_foler "$target_folder" "$i"
  retval=$?
  if [ $depth_max -lt $retval ];then
                        depth_max=$retval
                fi
#  echo "$i --depth: $retval"
 fi 
done
echo "max depth:$depth_max"

测试:
执行 du_folder2.sh  ./
结果是指定目录 ./ 的深度
实例:
 

复制代码 代码示例:
[root@localhost du_study2]# ./du_folder2.sh  /home/whuang/du_study2
max depth:2
[root@localhost du_study2]# du
4 ./ccc
4 ./test/abc
8 ./test
36 .
[root@localhost du_study2]#

说明:使用du 命令可以验证上面脚本的正确性。

linux 获取指定目录最大深度(层数)第二部分

脚本名:du_folder4.sh
脚本内容:
 

复制代码 代码示例:
#!/bin/sh
folder_name="$1"
if [ ! -d "$folder_name" ];then
 echo "The dir("${folder_name}") does not exist!"
 exit 3
fi
this_dir_tmp=`pwd`
# ./test(relative path) --->/home/whuang/du_study2/test
folder_name=`echo "$folder_name"|sed "s#^./#$this_dir_tmp/#g"`
 
# test(relative path) --->/home/whuang/du_study2/test
folder_name=`echo "$folder_name"|sed "s#^([a-zA-Z]+.*)#$this_dir_tmp/1#g"`
#----------------------------
 
depth_foler()
{
        this_dir=`pwd`
        source_folder="$1"
        source_folder=`echo $source_folder |sed 's#/$##g'`
        test_folder="$2"
        cd $test_folder
        count=0
        while [ ! `pwd` = $source_folder ]
        do
                count=`expr $count + 1`
                cd ..
        done
        cd $this_dir
        return $count
}
 
target_folder="$folder_name"
depth_max=1
for i in `du "$target_folder"` ;do
        if [ -d $i -a ! $i = $target_folder ];then
                depth_foler "$target_folder" "$i"
                retval=$?
                if [ $depth_max -lt $retval ];then
                        depth_max=$retval
                fi
        fi
done
echo "max depth: $depth_max"
 

执行范例:
 

复制代码 代码示例:
[root@localhost du_study2]# ./du_folder4.sh  /home/whuang/du_study2/test
max depth: 3
[root@localhost du_study2]# ./du_folder4.sh  ./test
max depth: 3
[root@localhost du_study2]# ./du_folder4.sh  test
max depth: 3
[root@localhost du_study2]# du test
4 test/bbb/aaa/ccc
8 test/bbb/aaa
12 test/bbb
16 test
 

说明:可以使用du 命令 来验证脚本du_folder4.sh的正确性。