1. ホーム
  2. バッシュ

[解決済み】Bashでglobにマッチするものがあるかどうかをテストする

2022-03-31 16:48:44

質問

1つのファイルが存在するかどうかを確認したい場合、以下の方法でテストすることができます。 test -e filename または [ -e filename ] .

あるグロブがあり、そのグロブに一致する名前のファイルが存在するかどうかを知りたいとします。グロブは、0個のファイルに一致することもあれば(その場合、私は何もする必要がありません)、1個以上のファイルに一致することもあります(その場合、私は何かをする必要があります)。グロブにマッチするファイルがあるかどうかをテストするにはどうすればよいですか? (マッチするファイルの数は気にしません。 if ステートメントを使用し、ループはありません(単に私が最も読みやすいと思うからです)。

( test -e glob* は、グロブが複数のファイルにマッチした場合に失敗します)。

解決方法は?

バッシュ -特有の解決策です。

compgen -G "<glob-pattern>"

パターンをエスケープしないと、マッチにあらかじめ展開されてしまいます。

終了ステータスは

  • 一致しない場合は1。
  • 1つ以上一致」の場合は0

stdout はリスト というグロブにマッチするファイル . 簡潔さと潜在的な副作用を最小限に抑えるという点では、これが最良の選択肢だと思います。

if compgen -G "/tmp/someFiles*" > /dev/null; then
    echo "Some files exist."
fi