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

JoB*_*oBe -2 bash shell-script directory-structure

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

我想循环遍历这些目录的每个目录,例如制作一个文件 touch test.txt

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

Kus*_*nda 5

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

for dir in /tmp/main/*/; do
    touch "$dir"/test.txt
done
Run Code Online (Sandbox Code Playgroud)

/在模式的结尾/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
Run Code Online (Sandbox Code Playgroud)

或者,等效地,

for dir in /tmp/main/*/; do
    [ -d "$dir" ] && touch "$dir"/test.txt
done
Run Code Online (Sandbox Code Playgroud)