我正在尝试编写一个将遍历文件目录的函数,并为我提供最深层目录的值.我已经编写了这个函数,它看起来像是要发送到每个目录,但我的计数器似乎根本不起作用.
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,它将在每个子目录中找到最深的值.我想更好地学习递归,但我不确定我做错了什么.
显然应该找到这个
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来打印输出,但是如果那是您想要的输出,那么最好以这种方式回显它.
当然,并不是说它有助于了解递归.
这是一个似乎有效的版本:
#!/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)