shell 脚本中用于打印当前目录的树状结构的错误

shell 脚本中用于打印当前目录的树状结构的错误

我写了以下脚本:

  #!/bin/bash

if [ $# -eq 0 ]
then
    read current_dir
else
    current_dir=$1
fi

function print_tree_representation ()
{
    for file in `ls -A $1`
    do
        local times_p=$2
        while [ $times_p -gt 0 ]
        do
            echo -n "----"
            times_p=$(( $times_p - 1 ))
        done
        echo $file

        if test -d $file
        then
            local new_path=$1/$file
            local new_depth=$(( $2 + 1 ))

            print_tree_representation $new_path $new_depth        
        fi
    done
}

print_tree_representation $current_dir 0

用于打印作为参数传递的目录的树状结构。然而,它并没有超出第二层深度。我不知道出了什么问题。

答案1

问题出在这一行:

if test -d $file

$file您从中提取的内容ls -A不包含完整路径。您可以通过将该行替换为来修复它

if test -d "$1/$file"

还有另一个错误,如果文件名中有空格,它就会到处乱。将文件名放在引号中。

相关内容