递归函数返回文件树的目录深度

Jef*_*Jef 8 linux bash

我正在尝试编写一个将遍历文件目录的函数,并为我提供最深层目录的值.我已经编写了这个函数,它看起来像是要发送到每个目录,但我的计数器似乎根本不起作用.

dir_depth(){ 

local olddir=$PWD
local dir
local counter=0
cd "$1"


for dir in *
do
  if [ -d "$dir" ]
  then
    dir_depth "$1/$dir"
    echo "$dir"
    counter=$(( $counter + 1 ))
  fi 
done
cd "$olddir"
}
Run Code Online (Sandbox Code Playgroud)

我想要它做的是为函数提供一个目录,例如/ home,它将在每个子目录中找到最深的值.我想更好地学习递归,但我不确定我做错了什么.

Sor*_*gal 8

显然应该找到这个

find . -type d -exec bash -c 'echo $(tr -cd / <<< "$1"|wc -c):$1' -- {} \;  | sort -n | tail -n 1 | awk -F: '{print $1, $2}'
Run Code Online (Sandbox Code Playgroud)

最后我使用awk来打印输出,但是如果那是您想要的输出,那么最好以这种方式回显它.

当然,并不是说它有助于了解递归.


Dig*_*oss 3

这是一个似乎有效的版本:

#!/bin/sh

dir_depth() {
  cd "$1"
  maxdepth=0
  for d in */.; do
    [ -d "$d" ] || continue
    depth=`dir_depth "$d"`
    maxdepth=$(($depth > $maxdepth ? $depth : $maxdepth))
  done
  echo $((1 + $maxdepth))
}

dir_depth "$@"
Run Code Online (Sandbox Code Playgroud)