根据以下情况重命名 html 文件 tag

根据以下情况重命名 html 文件 tag

我有一个文件夹,里面有一堆按顺序编号的 html 文件(file1.html、file2.html 等)。

我想根据每个文件中的标签重命名每个文件。

因此,如果 file1.html 包含<title>Page Name</title>,我希望脚本重命名该文件Page Name.html

我如何在 Linux 上执行此操作?

答案1

假设您的文档格式良好,这将是一个非常简单的方法:

#!/usr/bin/env bash
for f in *.html;
do
   title=$( grep -oP '(?<=<title>).*(?=<\/title>)' "$f" )
   mv -i "$f" "${title//[^a-zA-Z0-9\._\- ]}".html   
done

对发生的情况进行一些解释:

  • 为了仅获取实际标题,我们将使用grepPerl 正则表达式。有前瞻和后瞻来过滤掉实际的 HTML 标签并仅获取标题。这是一个看起来很复杂的正则表达式,但您无法轻松地仅使用 输出捕获的内容grep
  • 确保始终引用你的变量("$f")这样如果文件名称中有空格,整个过程仍然可以正常工作。
  • 默认情况下mv将覆盖现有文件。使用mv -i可避免这种情况,并让您的 shell 在覆盖之前提示您。
  • 除字母、数字、._-以及空格之外的任何字符都将从文件名中删除。我们使用子串替换
  • 要删除所有空格,使用mv -i "$f" "${title//[^a-zA-Z0-9\._\-]}".html
  • 要保持实际页面标题不变,只需使用mv "$f" "$title".html

相关内容