Bash Shell递归文件夹

时间:2015-01-17 21:14:19

标签: bash shell recursion

我想通过我的文件夹递归并打印文件夹/文件。 此代码应该可以工作,但它只适用于第一个文件夹。然后停止没有错误。

#!/bin/bash

dateiDurchsuchen() {
    DATEIEN=($(ls -d $1/*))
    for(( i=0;i<${#DATEIEN[*]};i++ ))
    do 
        echo ${#DATEIEN[*]}
        ELEMENT=${DATEIEN[$i]}
        echo $ELEMENT
        if [ -d $ELEMENT ]
        then    
            dateiDurchsuchen $ELEMENT
        fi
    done
}
dateiDurchsuchen $HOME

2 个答案:

答案 0 :(得分:2)

这是因为bash变量默认是全局的。

你必须明确地将它们标记为本地:

dateiDurchsuchen() {
    local DATEIEN=( "$1"/* )
    local i
    for(( i=0;i<${#DATEIEN[@]};i++ ))
    do
        echo ${#DATEIEN[@]}
        local ELEMENT=${DATEIEN[$i]}
        echo "$ELEMENT"
        if [ -d "$ELEMENT" ]
        then
            dateiDurchsuchen "$ELEMENT"
        fi
    done
}
dateiDurchsuchen "$HOME"

另请注意如何删除冗余ls以及引用的变量。这是处理带有特殊字符的文件名所必需的。

答案 1 :(得分:0)

这有效:

#!/bin/bash

dateiDurchsuchen() {
    DATEIEN=($(ls $1/*))
    for(( i=0;i<${#DATEIEN[*]};i++ ))
    do 
        echo ${#DATEIEN[*]}
        ELEMENT=${DATEIEN[$i]}
        echo $ELEMENT
        if [ -d $ELEMENT ]
        then    
            dateiDurchsuchen $ELEMENT
        fi
    done
}
dateiDurchsuchen $HOME