Bash

如何在目錄內的所有目錄中執行循環

  • September 28, 2020

假設我有一個名為的目錄/tmp/main ,其中有 100 個其他目錄。

我想通過這些目錄的每個目錄執行一個循環,例如用touch test.txt

我如何告訴腳本處理第一個,第二個,第三個等等?

一個簡單的循環將起作用:

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

引用自:https://unix.stackexchange.com/questions/611573