/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