1. ホーム
  2. bash

[解決済み] 特定の拡張子を持つすべてのファイルをループ処理する

2022-04-27 23:46:14

質問

for i in $(ls);do
    if [ $i = '*.java' ];then
        echo "I do something with the file $i"
    fi
done

現在のフォルダー内の各ファイルをループして、特定の拡張子にマッチするかどうかをチェックしたいのです。上のコードはうまくいきません。なぜかわかりますか?

どうすればいいですか?

派手な仕掛けは必要ありません。

for i in *.java; do
    [ -f "$i" ] || break
    ...
done

このガードにより、一致するファイルがない場合、存在しないファイル名を処理しようとせずにループが終了することが保証されます。 *.java . で bash (または同様のものをサポートするシェル)では nullglob オプション を使用すると、マッチに失敗しても単に無視し、ループの本体に入らないようにすることができます。

shopt -s nullglob
for i in *.java; do
    ...
done