呼び出し時にfind
ファイルが見つからない場合は、まだコード0で終了します。ファイルが見つからないときに失敗を示す終了コードを返す方法はありますか?
答え1
grep
NULで区切られた行(GNUなどgrep
)の読み取りをサポートしている場合は、-z
それを使用して出力される項目があるかどうかをテストできますfind
。
find /some/path -print0 | grep -qz .
データを別のコマンドにパイプするには、オプションを削除してデータを変更せずにそのままにし、-q
結果grep
がない場合はエラーを報告できます。
find /some/path -print0 | grep -z . | ...
特に${PIPESTATUS[1]}
終了ステータスはbashに保存する必要がありますgrep
。
find
これをサポートしていない場合は、grepなしで-print0
使用し-z
、ファイル名に改行が問題を引き起こさないことを願っています。
find ... | grep '^' | ...
この場合、^
代わりに使用する方が.
安全です。出力に連続した改行文字がある場合は^
無視されますが、.
そうではありません。
答え2
具体的には戻りコードをリクエストしました。オプションに対応する項目は表示されません。しかし、これが私が解決した方法です(grep -z
Macポートではないので)。
1行が見つかったら、コード0を指定してください。
test 1 == `find */.kitchen/ -name private_key | wc -l`
だから...
if [ 0 == `find */.kitchen/ -name my-file.txt | wc -l` ] ; then
echo "Nothing found"; exit;
fi
また、一般的な解決策として、以下が役に立ちます。
答え3
私はこの質問に非常に遅れていましたが、ちょうどエレガントな答えを見つけました:-)
find . -type d -empty -and -not -name . -print -exec rmdir {} + | \
awk '{print} END {if (NR == 0) {exit(1)}}'
find
ここでは、現在のディレクトリで空のディレクトリを探し、空のディレクトリを削除し、削除された ディレクトリの名前をパイプに印刷し、出力を印刷
し、出力がない場合はエラーコードで終了します。
awk
find
NR == 0
これは、空のディレクトリを繰り返すことができることを意味します。
while find . -type d -empty -and -not -name . -print -exec rmdir {} + | \
awk '{print} END {if (NR == 0) {exit(1)}}'; \
do echo; done
「my」パラメータを希望のfind
ものに置き換え、端末に表示される出力を望まない場合はその部分を保持し、awk
その部分を保持しないと「voila」になります。{print}
find