我们如何迭代给定目录的子目录并在 bash 中获取这些子目录中的文件。我可以使用 grep 命令来做到这一点吗?
这将深入一个子目录。内部
for
循环将迭代封闭的文件和目录。 if
语句将排除目录。您可以设置选项以包含隐藏文件和目录 (shopt -s dotglob
)。
shopt -s nullglob
for dir in /some/dir/*/
do
for file in "$dir"/*
do
if [[ -f $file ]]
then
do_something_with "$file"
fi
done
done
这将是递归的。您可以使用
-maxdepth
选项限制深度。
find /some/dir -mindepth 2 -type f -exec do_something {} \;
使用
-mindepth
会排除当前目录中的文件,但会包含下一级(及以下,取决于 -maxdepth
)中的文件。
好吧,你可以使用
grep
来做到这一点:
grep -rl ^ /path/to/dir
但是为什么呢?
find
更好。
您可能正在寻找 find(1)。
我在 mac 终端上,以上都不适合我。如果有人像我一样在 mac 终端上尝试,这对我有用:
p=$(pwd);arrayname=( $(find . -maxdepth 1 -type d ) );for element in $(seq 0 $((${#arrayname[@]} - 1)));do echo "${arrayname[$element]}";cd "$p/${arrayname[$element]:2}"; pi=$(pwd); echo "i am inside: "$pi "I will do something here" ; cd ..; echo "Now i am outside: "$p ;done;