find -execの出力に基づいてファイルを作成する

find -execの出力に基づいてファイルを作成する

HTMLファイルのバッチ検証(w3cバリデータ)ペイロード用のシェルスクリプトを作成しています。

私はそれを使用していますhttps://github.com/mozilla/html5-lint実際の検証タスクを実行するためのPythonスクリプトを提供します。

現在実行中のコマンドは次のとおりです。

find . -type f -name "*q2*.html" -print -exec ~/Downloads/html5-lint-master/html5check.py -e {} \;

これは、次の形式の出力を実行して生成します。

The document is valid HTML5 + ARIA + SVG 1.1 + MathML 2.0 (subject to the utter previewness of this service).

有効な場合。

またはエラーリスト - 例:

Error: Attribute “placeholder” is only allowed when the input type is “email”, “number”, “password”, “search”, “tel”, “text”, or “url”.
From line 53, column 13; to line 53, column 92
Error: Attribute “placeholder” is only allowed when the input type is “email”, “number”, “password”, “search”, “tel”, “text”, or “url”.
From line 57, column 13; to line 57, column 95
There were errors. (Tried in the text/html mode.)

応答に応じて、出力を含むHTMLファイルと同じフォルダにvalid.txtまたはvalid.txtというファイルを作成したいと思います。

これを達成するための最良の方法の提案がありますか?

ベストアンサー1

次のように使用できます。

find . -type f -name '*q2*.html' -execdir sh -c '
    your/script "$1" > invalid.txt
    grep -q "Error:" invalid.txt || mv invalid.txt valid.txt
' sh {} \;

(in)valid.txt同じディレクトリに一致する複数のhtmlファイルがある場合、ファイルは上書きされます。名前が各ディレクトリで一意であるように、出力ファイル名にfind含めることができます。$(basename "$1")

を使用すると、-execdir見つかった各ファイルのディレクトリからコマンドが実行されます。

grep -q1見つからない場合は自動的に終了し、失敗するため()Error:後続のコマンドが実行されます。||エラーが見つかった場合、正常に終了grep0)してmv実行しません。

スクリプトなどの特定のエラーをキャッチするためにさらに追加できます。また、有効なファイルの検索パターンが存在しないことを確認してください。


別のアプローチは、プログラムによって印刷されたメッセージとは関係のない終了コードを使用することです。

import sysPythonスクリプトに追加し、sys.exit(0)有効またはsys.exit(42)無効なファイルに使用します。実行後に終了コード($?)を解析し、実行するアクションを決定します。

また見なさい:https://tldp.org/LDP/abs/html/exitcodes.html

例:

your/script "$1" > output.txt
result=$?
((result == 0)) && do stuff for valid file
((result == 42)) && do stuff for invalid file

おすすめ記事