【发布时间】:2016-07-22 12:39:02
【问题描述】:
我正在编写一个 bash 脚本,我必须在其中以树的形式显示目录的内容。我知道有一种方法可以做到这一点,但我正在尝试使用递归算法来解决这个问题。
这是我目前所拥有的:
#!/bin/bash
tree(){
space=$2
if [ -d $1 ]
then
printf "%s" $space "-----|" $1
printf "\n"
cd $1
space="$space-----|"
for a in *
do
tree $a $space
done
cd ..
else
printf "%s" $space "-----|" $1
printf "\n"
fi
}
cd $1
for file in *
do
space="|"
tree $file $space
done
我的目录“Dir”包含目录“SubDir1”、“SubDir2”、“SubDir3”和文件“filem”。 “SubDir1”包含文件“filea”、“fileb”和“filec”。 “SubDir2”包含目录“SubSubDir”和文件“fileg”、“fileh”和“filei”。目录“SubSubDir”包含文件“filed”、“filee”和“filef”。目录“SubDir3”包含文件“filej”“filek”和“filel”。
当我在命令行输入./dirtree Dir时,显示如下:
|-----|SubDir1
|-----|-----|filea
|-----|-----|fileb
|-----|-----|filec
|-----|SubDir2
|-----|-----|SubSubDir
|-----|-----|-----|filed
|-----|-----|-----|filee
|-----|-----|-----|filef
|-----|-----|-----|fileg
|-----|-----|-----|fileh
|-----|-----|-----|filei
|-----|SubDir3
|-----|-----|filej
|-----|-----|filek
|-----|-----|filel
|-----|filem
这个输出几乎是正确的,除了文件 g 到 i 不在目录 SubSubDir 中。问题出在我的空间中。当文件不在上一个子目录中时,我需要重置破折号,但我需要找到一种可以递归执行此操作的方法,以便破折号的数量适合树的深度。
感谢您的帮助。
【问题讨论】:
标签: bash algorithm unix recursion tree