Bash Shell 递归文件夹

Bash Shell recursive folder

我想递归浏览我的文件夹并打印出 folders/files。 此代码应该有效,但它仅适用于第一个文件夹。然后它停止没有错误。

#!/bin/bash

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

这个有效:

#!/bin/bash

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

发生这种情况是因为 bash 默认情况下变量是全局的。

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

dateiDurchsuchen() {
    local DATEIEN=( ""/* )
    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 以及引用的变量。这是处理带有特殊字符的文件名所必需的。