Я знаю, что моя следующая задача может быть выполнена с использованием более простого комментария «find», но я пытаюсь реализовать решение, используя рекурсивный вызов. Я просматриваю конкретный каталог и пытаюсь получить максимальную длину любого имени файла во всех подкаталогах. Однако моя рекурсия работает только на одном уровне вниз, поэтому она в основном возвращает мне самое длинное имя файла в определенном каталоге или в его «подкаталогах».Рекурсивная функция bash (итератор каталогов)
#! /bin/bash
export maxlen=0
findmaxr()
{
if [ $# -eq 0 ] ; then
echo "Please pass arguments. Usage: findmax dir"
exit -1
fi
if [ ! -d "$1" ]; then
echo "No such directory exist."
exit -2
fi
for file in $(/bin/ls $1)
do
if [ -d "$file" ] ; then
findmaxr $file # Recursively call the method for subdirectories
else
cur=${#file}
if [ $maxlen -lt $cur ] ; then
maxlen=$cur
fi
fi
done
echo "The file with the longest name has [$maxlen] characters."
}
findmaxr `pwd`
Спасибо. Я читал где-то еще, что разбор ls проблематичен, но не мог найти объяснения этого. Информация, которую вы предоставили, очень полезна! – DR29