というディレクトリがあり、/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