如何解决这个Bash函数在指定的path启动和recursion列出其子目录和那些子目录等

我试图编写一个脚本来search一个目录,它的子目录等文件匹配给定的正则expression式。 所以我开始试图编写一个函数来获取目录和子目录。 出于某种原因,它目前似乎只能得到指定目录中的第一个子目录。

这是function:

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

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

这应该这样做,虽然find更有效率。

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

如果你需要一个用于搜索文件名的正则表达式 ,试着用find来做这个事情:

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

如果你想得到所有的目录/子目录:

 find . -type d 

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

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

或者保存当前的dir,然后在你的循环之后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> cd "$1" || <do something as the cd failed>