globパターンが何も返すかどうかを確認する方法

globパターンが何も返すかどうかを確認する方法

/var/some-dir/*返された項目があるかどうかを確認するには?

使用しfind /var/some-dir/* ...てもパターンが空の場合、エラーが発生します。リダイレクトしたくありませんstderr

実行する前にfindパターンが何であれ、エラーを返すかどうかを確認したいと思います。

ベストアンサー1

戻り値を処理できる必要があります。

findこの方法で使用すると何も見つからない場合は返されるので、次のことが1できます。

find /var/some-dir/*
if [[ $? -eq 1 ]]
then
  perform_failure_action
fi

事前に確認したい場合、次のことを試すことができます。

shopt -s nullglob
f=/var/some-dir/*
if [ -z $f ]
then
  printf -- "No such file!\n"
else
   find /var/some-dir/*
fi

このshopt行は、globパターンに一致するファイルが存在しない場合は空の文字列に展開されて渡されることを保証します-z

この場合、必ずいいえ$fあなたの言葉を引用してください考える今回のテストではグローバル拡張が行われました。同じ理由で演算子をテストするには、単一の括弧を使用する必要があります。いいえ二重括弧演算子は、測定された変数に対して独自の「保護」スキームを実装できます。

または、これをサポートするシェル(Bashなど)を使用している場合は、そのcompgenオプション-Gと一緒に組み込みコマンドを使用できます。これにより、指定されたglobパターン()の完成リストが生成され、-G一致した場合に返されます。true

if compgen -G /var/some-dir/*
then
  find /var/some-dir/*
else
  printf -- "No such file!\n"
fi

おすすめ記事