如何在目录内的所有目录中运行循环

如何在目录内的所有目录中运行循环

假设我有一个名为 的目录/tmp/main ,其中有 100 个其他目录。

我想循环遍历这些目录的每个目录,例如使用touch test.txt

我如何告诉脚本处理第一个、第二个、第三个等等?

答案1

一个简单的循环就可以工作:

for dir in /tmp/main/*/; do
    touch "$dir"/test.txt
done

/模式末尾的保证/tmp/main/*/如果模式匹配任何内容,它将匹配目录。

在 中bash,您可能需要在循环之前设置nullglobshell 选项shopt -s nullglob,以确保在模式与任何内容都不匹配时循环根本不会运行。如果没有nullglob设置,循环仍将运行一次,并且模式在 中未展开$dir。解决这个问题的另一种方法是在调用之前确保它$dir实际上是一个目录touch

for dir in /tmp/main/*/; do
    if [ -d "$dir" ]; then
        touch "$dir"/test.txt
    fi
done

或者,等价地,

for dir in /tmp/main/*/; do
    [ -d "$dir" ] && touch "$dir"/test.txt
done

答案2

您可以使用find

find /tmp/main -type d -exec touch {}/test.txt \;

如果您想排除该/tmp/main文件夹在使用结果中返回find

find /tmp/main ! -path /tmp/main -type d -exec touch {}/test.txt \;

或者

find /tmp/main -mindepth 1 -type d -exec touch {}/test.txt \;

相关内容