JoB*_*oBe -2 bash shell-script directory-structure
假设我有一个名为的目录/tmp/main
,其中有 100 个其他目录。
我想循环遍历这些目录的每个目录,例如制作一个文件 touch test.txt
我如何告诉脚本处理第一个、第二个、第三个等等?
一个简单的循环可以工作:
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)