在 bash 中迭代子目录

问题描述 投票:0回答:4

我们如何迭代给定目录的子目录并在 bash 中获取这些子目录中的文件。我可以使用 grep 命令来做到这一点吗?

bash grep
4个回答
17
投票

这将深入一个子目录。内部

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
)中的文件。


3
投票

好吧,你可以使用

grep
来做到这一点:

grep -rl ^ /path/to/dir

但是为什么呢?

find
更好。


2
投票

您可能正在寻找 find(1)


0
投票

我在 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;
© www.soinside.com 2019 - 2024. All rights reserved.