我正在尝试编写一个脚本来搜索目录及其子目录等,以查找与给定正则表达式匹配的文件。所以我开始尝试编写一个函数来获取目录和子目录。出于某种原因,它目前似乎只获得指定目录中的第一个子目录。
这是功能:
getDirs() {
cd "$1"
for i in *; do
if [ -d "$i" ]; then
echo "dir: $PWD/$i"
getDirs "$i"
fi
done
}
getDirs $path
任何想法如何解决这个问题?
答案 0 :(得分:2)
如果您需要 regex 来搜索文件名,请尝试使用find执行此操作:
regex="YourRegexPattern"
find "$1" -type f -regextype posix-egrep -regex "$regex"
如果你想获得所有dirs / subdirs:
find . -type d
答案 1 :(得分:1)
虽然find
效率更高,但应该这样做。
getDirs() {
for i in "$1"/*; do
if [ -d "$i" ]; then
echo "$i"
getDirs "$i"
fi
done
}
答案 2 :(得分: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>
。