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”/*)
“将每个文件名放入数组”