Bashでグロブに一致するものがあるかどうかをテストする 質問する

Bashでグロブに一致するものがあるかどうかをテストする 質問する

単一のファイルの存在を確認したい場合は、test -e filenameまたはを使用してテストできます[ -e filename ]

glob があり、その glob に一致する名前のファイルが存在するかどうかを知りたいとします。glob は 0 個のファイルに一致する場合 (その場合は何もする必要はありません)、または 1 個以上のファイルに一致する場合 (その場合は何かする必要があります) があります。glob に一致するものがあるかどうかをテストするにはどうすればよいでしょうか? (一致する数がいくつあってもかまいません。ifループなしで 1 つのステートメントでこれを行うことができれば最適です (単にそれが最も読みやすいと思うからです)。

( test -e glob*glob が複数のファイルに一致する場合は失敗します。)

ベストアンサー1

Bash固有のソリューション:

compgen -G "<glob-pattern>"

パターンをエスケープしないと、マッチに事前拡張されてしまいます。

終了ステータスは次のとおりです:

  • 1は一致なし、
  • 0 は「1 つ以上の一致」

stdoutglob に一致するファイルのリストです。簡潔さと潜在的な副作用を最小限に抑えるという点では、これが最良のオプションだと思います。

例:

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

おすすめ記事