根据 find -exec 的输出创建文件

根据 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.)

根据响应,我希望在与包含输出的 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 -q1如果没有找到,则静默退出并失败( ),因此执行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

相关内容