Shell-Script

根據 find -exec 的輸出創建文件

  • June 5, 2022

我正在編寫一個 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

引用自:https://unix.stackexchange.com/questions/704986