我试图编写一个脚本来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>
。