首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从HTML中提取标题并将文件重命名为标题

从HTML中提取标题并将文件重命名为标题
EN

Stack Overflow用户
提问于 2018-08-08 21:09:57
回答 2查看 345关注 0票数 0

我有多个名为output.html的文件。我想提取他们的标题,我可以使用以下命令成功完成:

代码语言:javascript
运行
复制
cat output.html | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'

示例:

代码语言:javascript
运行
复制
7N8UGL0:~/Downloads$ cat output.html | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'
SEIKO 5 Finder - SNK559 Automatic Watch

现在,我想将output.html重命名为提取的标题:

代码语言:javascript
运行
复制
SEIKO 5 Finder - SNK559 Automatic Watch.html

我已经成功地将其放入脚本中:

代码语言:javascript
运行
复制
#!/bin/bash
title=`cat output.html | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'`
echo $title

此外,我在以纪元时间格式命名的目录中有很多这样的output.html文件

代码语言:javascript
运行
复制
ls -l
drwxrwxrwx 1 userna userna 512 Aug  7 19:33 1500122724.81
drwxrwxrwx 1 userna userna 512 Aug  7 19:33 1500122724.82
drwxrwxrwx 1 userna userna 512 Aug  7 19:33 1500122724.83
drwxrwxrwx 1 userna userna 512 Aug  7 19:32 1500122724.84
drwxrwxrwx 1 userna userna 512 Aug  7 18:36 1500122724.85
drwxrwxrwx 1 userna userna 512 Aug  7 18:35 1500122724.86

我希望能够提取所有目录中的所有output.html的html标题,并相应地重命名output.html。

在此之前,非常感谢,

jmt

EN

回答 2

Stack Overflow用户

发布于 2018-08-08 22:01:08

使用命令find执行以下操作

  • process all files (-type f)
  • of name output.html (-name output.html)。
  • 对它们运行重命名脚本(-exec rename.bash {} \;)。

Find递归遍历每个目录。

因此,完整的命令将如下所示:

代码语言:javascript
运行
复制
find <YOUR TOP DIRECTORY> -type f -name output.html -exec rename.bash {} \; -print

最后的-print将列出所有已处理的文件到标准输出。重命名脚本在参数中接收它找到的output.html的完整路径和文件名。因此,您必须执行sed命令,然后将接收到的参数的mv传递给path/THE-TITLE-VALUE-YOU-JUST-EXTRACTED-WITH-SED.html

仅供参考,我建议您在重命名时要小心。文件名中的空格,尽管是完全“合法”的,但可能会在以后引起问题。还要确保您的标题不包含shell中的特殊字符,如*,!().等。所有字母数字以及-_都没问题。

票数 1
EN

Stack Overflow用户

发布于 2018-08-09 23:35:44

我能够通过编写以下脚本来解决这个问题:

代码语言:javascript
运行
复制
#!/bin/bash
for file in $(find . -name output.html)
do
newfilename=`cat $file |  sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'`
mv $file "$newfilename.html"
done

它的作用如下:

为位置中每个名为output.html的文件设置新文件名。

  • 将变量"newfilename“设置为等于提取的标记(例如,"SEIKO 5 Finder - SNK559自动监视“

  • 将$file从1.重命名为newfilename值。对于"$newfilename“,我使用了引号,因为文件名

中有空格

现在我想找到一种方法来识别像/这样的特殊字符:因为当HTML标题中包含这些字符时,我会得到一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51747623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档