我想通过我的文件夹递归并打印文件夹/文件。 此代码应该可以工作,但它只适用于第一个文件夹。然后停止没有错误。
#!/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
答案 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