bash脚本:遍历目录

时间:2010-11-17 04:21:27

标签: bash loops directory

我目前正在尝试将目录作为参数,然后列出目录的内容。如果另一个目录在该目录中,则以递归方式执行相同操作。

当前代码:

#! /bin/bash

function gothrudir {
for f in $1
do 
if [ -n "$( file $f|grep "directory" )" ] ;
then
gothrudir $f
else
ls $f
fi
done
]
gothrudir $1
gothrudir `pwd`

我不确定如何传递目录中的所有文件以进行循环。目前它只是一个无限循环,因为它只检查给定的目录,看到它的目录,然后回忆起自己。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,find是一种更好的方法。但只是为了完整性,这里是如何修复递归bash函数。我改变了三件事(加上一些次要的格式更改):使用"$1"/*获取$ 1中的文件列表,双引所有路径(它们有时包含空格),并使用[ -d ... ]而不是调用file以查看某些内容是否为目录。

function gothrudir {
    for f in "$1"/*; do
        if [ -d "$f" ]; then
            gothrudir "$f"
        else
            ls "$f"
        fi
    done
}

gothrudir "$1"

答案 1 :(得分:1)

function fnd {

    find $1 -type d -exec ls -d {} \; 

}

答案 2 :(得分:0)

你有没有理由这样做而不是使用find?

例如:find -ls

答案 3 :(得分:0)

'找到。 -type d'做到了这个