Традиционный способ сделать это - dir_depth
также вернуть максимальную глубину. Таким образом, вы вернете как имя, так и глубину.
Вы не можете вернуть массив, структуру или объект в bash, поэтому вы можете вернуть, например, вместо этого запятая строка ..
dir_depth(){
local dir
local max_dir="$1"
local max_depth=0
for dir in $1/*
do
if [ -d "$dir" ]
then
cur_ret=$(dir_depth "$dir")
cur_depth=$(expr "$cur_ret" : '\([^,]*\)')
cur_dir=$(expr "$cur_ret" : '.*,\(.*\)')
if [[ "$cur_depth" -gt "$max_depth" ]]; then
max_depth="$cur_depth"
max_dir="$cur_dir"
fi
fi
done
max_depth=$(($max_depth + 1))
echo "$max_depth,$max_dir"
}
РЕДАКТИРОВАТЬ: Исправлено сейчас. Он начинается с каталога, в котором вы прошли уровень 1, а затем считается вверх. Я удалил cd
, так как он не нужен. Обратите внимание, что это не удастся, если имена файлов содержат запятые.
Возможно, вы захотите использовать язык программирования с более встроенными структурами данных, например Python.