首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量重命名pdf文件,其名称来自linux中其内容的特定行。

批量重命名pdf文件,其名称来自linux中其内容的特定行。
EN

Stack Overflow用户
提问于 2017-10-13 14:07:38
回答 1查看 2.8K关注 0票数 4

我有多个要重命名的pdf文件。新的名称应该从pdf的文件内容的特定(比如说第5行)中取下来。例如,如果文件的第5行有内容some string <--这个字符串应该是文件名。其他文件也是一样的。每个文件都应该用内容的第5行重命名。我在终端机上试过这个

代码语言:javascript
复制
for pdf in *.pdf
do
   filename=`basename -s .pdf "${pdf}"`
   newname=`awk 'NR==5' "${filename}.pdf"`
   mv "${pdf}" "${newname}"
done

它复制文件,但名称是无效字符串。我知道系统不把文件看作纯文本和图像,有元数据、xml标记等等。但是有没有办法从这一行中获取内容呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-13 14:37:30

开箱即用,bash及其常用的实用程序无法读取pdf文件。然而,less能够从pdf文件中恢复文本。您可以按以下方式更改脚本:

代码语言:javascript
复制
for pdf in *.pdf
do
    mv "$pdf" "$(less $pdf | sed '5q;d').pdf"
done

说明:

  • less "$pdf":显示pdf文件的文本部分。将考虑到的间距
    • 进行一些测试,看看less是否返回所需的输出

  • sed '5q;d':提取输入文件的第5行

或者,您可以使用以下脚本删除空行和超过空格:

代码语言:javascript
复制
mv "$pdf" "$(less "$pdf" | sed -e '/^\s*$/d' -e 's/ \+/ /g' | sed '5q;d').pdf"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46731805

复制
相关文章

相似问题

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