在shell脚本中递归打印所有目录和子目录

时间:2014-08-13 06:26:56

标签: shell unix sh

我是shell脚本的新手所以我试图从谷歌中找到但是找不到任何解决方案或任何类似的代码来满足我的需求。 我只需要一个包含子文件夹和特定格式的文件的文件夹。 例如。我有一个主文件夹folderA和2个子文件夹A1和A2在这些文件夹中还有5个子文件夹

/folderA 
   /folderA1
      /folderA11
      /folderA12
   /folderA2
      /folderA21
      /folderA22
      /folderA23

finnaly我需要以这种格式打印这些文件夹:

1: folderA 
   11 : folderA1
           111 : folderA11
           112 : folderA12
   12 : folderA2
           121 : folderA21
           122 : folderA22
           123 : folderA23

我只需要一个简单的循环代码或类似的代码来在shell脚本中实现这一点。

谢谢您的任何想法...

2 个答案:

答案 0 :(得分:1)

我希望你指的是原来的Ksh:

#!/bin/ksh

function recurse {
    typeset PREFIX=$1 I=0
    shift
    for DIR; do
        if [[ -d $DIR ]]; then
            let ++I
            echo "${PREFIX}${I} : ${DIR##*/}"
            recurse "    ${PREFIX}${I}" "$DIR/"*
        fi
    done
}

recurse '' "$@"

测试:

$ ksh script.sh FolderA
1 : folderA
    11 : folderA1
        111 : folderA11
        112 : folderA12
    12 : folderA2
        121 : folderA21
        122 : folderA22
        123 : folderA23

答案 1 :(得分:0)

print() ( c=1; p=${2-1}; cd "$1"; echo "$p : $1";  
  for i in *; do test -d "$i" || continue;   
  print "$i" "  $p$((c++))"; done; 
)

将此调用为print .以显示当前工作目录的所需输出,或print /p/a/t/h显示/p/a/t/h目录的输出。