Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bashshell递归文件夹_Bash_Shell_Recursion - Fatal编程技术网

bashshell递归文件夹

bashshell递归文件夹,bash,shell,recursion,Bash,Shell,Recursion,我想循环浏览我的文件夹并打印出文件夹/文件。 此代码应该可以工作,但它只适用于第一个文件夹。然后它就会停止,不会出错 #!/bin/bash dateiDurchsuchen() { DATEIEN=($(ls -d $1/*)) for(( i=0;i<${#DATEIEN[*]};i++ )) do echo ${#DATEIEN[*]} ELEMENT=${DATEIEN[$i]} echo $ELEMENT

我想循环浏览我的文件夹并打印出文件夹/文件。 此代码应该可以工作,但它只适用于第一个文件夹。然后它就会停止,不会出错

#!/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
#/bin/bash
dateiDurchsuchen(){
日期=($(ls-d$1/*))
对于((i=0;i这项工作:

#!/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
!/bin/bash
dateiDurchsuchen(){
DATEIEN=($(ls$1/*))

对于((i=0;i这是因为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"
dateiDurchsuchen(){
本地日期=(“$1”/*)
本地i

为了((i=0;i@Schs这不是问题,您的解决方案不起作用。在您的主目录中创建一个
foo/bar/baz/myfile
,您将看到
myfile
未被列出。是的,sry您是对的。它与您的解决方案一起工作。感谢您的帮助。您能说出为什么ls是多余的,所以我学到了一些东西…@Schs globs被扩展了b在shell中,
ls-d
只列出带有颜色和列的输入,这里没有使用这两种颜色。您也可以使用
array=($(echo$1/*)
,“打印每个文件名,用空格分隔,捕获输出,用空格分割,然后将每个元素添加到数组中”,这可以更好地表示为
array=(“$1”/*)
“将每个文件名放入数组”