현재 디렉토리의 트리 구조를 인쇄하기 위한 쉘 스크립트 오류

현재 디렉토리의 트리 구조를 인쇄하기 위한 쉘 스크립트 오류

나는 다음 스크립트를 작성했습니다.

  #!/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"

또 다른 버그가 있습니다. 파일 이름에 공백이 있으면 모든 곳에서 발생합니다. 파일 이름을 따옴표로 묶으십시오.

관련 정보