将多个 HTML 解析为文本并重命名为父目录

将多个 HTML 解析为文本并重命名为父目录

在一个目录中有许多.html文件夹,我想将所有HTML解析为具有父目录名称的新.txt。

示例1/Index.html>示例1.txt

示例2/Index.html>示例2.txt

答案1

显然,您希望将某些 HTML 页面转换为纯文本。因此,我不会使用自定义解决方案(例如使用一些 sed magic)来删除标签,而是使用为此目的而设计的工具,例如html2text;摘自其网页:

html2text 是一个 Python 脚本,可将 HTML 页面转换为干净、易读的纯 ASCII 文本。更棒的是,该 ASCII 恰好也是有效的 Markdown(一种文本转 HTML 格式)。

解决批量重命名的问题:

find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' dirname
 do python path/to/html2text/html2text.py "${dirname}/index.html" > "${dirname}/${dirname}.txt"
done

在这里,find 命令列出仅位于当前目录中的所有目录(即非递归),并且 read 命令(在 while 条件中)将值赋给变量。最后,执行和get$dirname之间的命令,这里它会根据您的要求转换文件。正如 @slhck 指出的那样,您需要使用这样一个复杂的命令,这样带有空格的目录名才不会破坏任何东西。dodone

[编辑]:另一种转换当前目录下所有 HTML 文件的变体:

find . -iname "*.html" -print0 | while IFS= read -r -d '' filename
  do python path/to/html2text/html2text.py "${filename}" > "${filename%.*}.txt"
done

iname搜查案件不敏感*.html

${filename%.*}.txt删除扩展名并附加.txt,即,如果filenamesome/path/index.html${filename%.*}则是some/path/index,最后${filename%.*}.txtsome/path/index.txt


当您使用Z壳,你可以使用更干净的 for 循环,而不会在空白处刹车:

for i (*(/)) python path/to/html2text/html2text.py "${i}/index.html" > "${i}/${i}.txt"

这里的技巧是*(/)生成文件名,但只返回目录(/)

[编辑]:此外,在 zsh 语法中,还有转换当前目录下所有 HTML 文件的变体(您需要EXTENDEDGLOB设置选项):

for i ((#i)**/*.html) {
   python path/to/html2text/html2text.py "$i" > "${i:r}.txt"
}

(#i)用例不敏感的通配符,**递归搜索,因此返回当前工作目录下的所有 HTML 文件。(如果需要遵循符号链接,请使用三颗星,***而不是两颗星)。

如果 for 循环内有多个命令,请使用花{ ... }括号(这里不需要,但不会造成损害)。

${i:r}从变量中剥离扩展名(r 表示删除)$i

相关内容