Bash
如何在目錄內的所有目錄中執行循環
假設我有一個名為的目錄
/tmp/main
,其中有 100 個其他目錄。我想通過這些目錄的每個目錄執行一個循環,例如用
touch test.txt
我如何告訴腳本處理第一個,第二個,第三個等等?
一個簡單的循環將起作用:
for dir in /tmp/main/*/; do touch "$dir"/test.txt done
/
模式末尾的保證/tmp/main/*/
如果模式匹配任何內容,它將匹配一個目錄。在
bash
中,您可能希望在循環之前設置nullglob
shell 選項,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