2

我正在尝试编写一个脚本来搜索目录及其子目录等以查找与给定正则表达式匹配的文件。所以我首先尝试编写一个函数来首先获取目录和子目录。由于某种原因,它目前似乎只获取指定目录中的第一个子目录。

这是功能:

getDirs() {

cd "$1"
for i in *; do
    if [ -d "$i" ]; then
        echo "dir: $PWD/$i"
        getDirs "$i"
    fi
done
}

getDirs $path

任何想法如何解决这一问题?

4

3 回答 3

2

如果您需要正则表达式来搜索文件名,请尝试使用执行此操作:

regex="YourRegexPattern"
find "$1" -type f -regextype posix-egrep -regex "$regex"

如果您想获取所有目录/子目录:

find . -type d
于 2012-12-02T18:24:25.277 回答
1

这应该这样做,尽管find效率更高。

getDirs() {
    for i in "$1"/*; do
        if [ -d "$i" ]; then
            echo "$i"
            getDirs "$i"
        fi
    done
}
于 2012-12-02T18:35:19.237 回答
0

当然,那只是因为你在循环之后永远不会回到上一个目录。你可以把所有东西都放在一个子shell中:

getDirs() {
    (
    cd "$1"
    for i in *; do
        if [[ -d "$i" ]]; then
            echo "dir: $PWD/$i"
            getDirs "$i"
        fi
    done
    )
}

getDirs $path

cd或在循环之后将当前目录保存到其中:

getDirs() {
    local currentdir=$PWD
    cd "$1"
    for i in *; do
        if [[ -d "$i" ]]; then
            echo "dir: $PWD/$i"
            getDirs "$i"
        fi
    done
    cd "$currentdir"
}

getDirs $path

或其他......我想你现在明白你的错误在哪里了!

您还应该检查您是否cd使用过,例如cd "$1" || <do something as the cd failed>.

于 2012-12-02T18:41:58.150 回答