我正在编写一个 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.)
根据响应,我希望在与包含输出的 HTML 文件相同的文件夹中创建一个名为 valid.txt 或 invalid.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 -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