Shell-Script
根據 find -exec 的輸出創建文件
我正在編寫一個 shell 腳本來批量驗證(w3c 驗證器)載入的 HTML 文件。
我正在使用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.)
根據響應,我希望在與包含輸出的名為 valid.txt 或 invalid.txt 的 HTML 文件相同的文件夾中創建一個文件。
關於如何最好地實現這一目標的任何提示?
你可以使用這樣的東西:
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
請注意,如果您有多個與您的find
, 匹配的 html 文件到同一目錄中,您將覆蓋該文件。您可能希望將其包含$(basename "$1")
在輸出文件名中,以使其名稱在每個目錄中都是唯一的。使用
-execdir
,該命令將在找到的每個文件的目錄中執行。
grep -q``1
如果找不到,則以失敗()靜默退出Error:
,因此執行之後的命令||
。如果發現錯誤,則grep
成功退出 (0
) 並且mv
不執行。您可能想要添加更多內容來擷取腳本錯誤等情況。還要確保有效文件的搜尋模式不存在。
另一種方法,與您的程序正在列印的消息無關,是使用退出程式碼。
import sys
到您的 python 腳本並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