ディレクトリリストからコマンドを実行したいですgradle --build-cache
。また、ディレクトリは "Project"文字列で始まる必要があり、 "Test"で終わらないでください。次のコマンドを使用してこれを正常に実行しました。
find . -maxdepth 1 -type d \( ! -name . \) -name "Project*" ! -name "*Test*" -exec sh -c "cd '{}' && pwd && gradle --build-cache" \;
しかし、私の問題は、gradleコマンドが失敗する可能性があることです。コマンドのみを実行すると「exit 1」が返されますが、ディレクトリコマンドの1つが失敗すると、失敗を返さずにスクリプトが続行されます。最後に、ループは成功を返しますexit 0
...
gradleコマンドが失敗したときにループの実行を停止して通常のコマンドに戻る方法はexit 1
?
ありがとうございます:)
ベストアンサー1
同様の質問です。https://apple.stackexchange.com/questions/49042/how-do-i-make-find-fail-if-exec-fails。私はあなたの目標を達成する可能性が最も高い2つの便利な方法をリストしました。
最も簡単な方法はを使用することですが、xargs
これはコマンドが見つかるパスにスペースがない場合にのみ機能しますfind
。
find … -print0 | xargs -0 -n1 invalid_command
古いBash(4.xx未満)を使用している場合は、再帰ワイルドカードの検索と使用を削除するか、再帰検索を直接実装することもできます(ディレクトリツリーが問題を引き起こすのに十分深いかどうか疑問です)。
shopt -s globstar
set -e
for x in **/*.xml; do invalid_command "$x"; done
または、1行で作成する必要がない場合は、まずすべてのディレクトリを見つけて一時ファイル(mktemp
そのファイル用)に保存し、リストを使用して必要なすべての操作を実行できます。さらにフィルタリングするには、その項目に対してコマンドを実行します。