ディレクトリ内のすべてのディレクトリを介してループを実行する方法

ディレクトリ内のすべてのディレクトリを介してループを実行する方法

というディレクトリがあり、/tmp/main その中に100の異なるディレクトリがあるとしましょう。

たとえば、次のようにこれらの各ディレクトリを繰り返したいとします。touch test.txt

最初、2番目、3番目などを処理するようにスクリプトにどのように指示しますか?

ベストアンサー1

単純なループが機能します。

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

/パターンの終わりの保証は、/tmp/main/*/パターンが何であれ、ディレクトリが一致することです。

では、パターンが一致しない場合にループがまったく実行されないように、bashループの前にnullglobシェルオプションを設定する必要があります。設定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

おすすめ記事