我有多个要重命名的pdf文件。新的名称应该从pdf的文件内容的特定(比如说第5行)中取下来。例如,如果文件的第5行有内容some string <--这个字符串应该是文件名。其他文件也是一样的。每个文件都应该用内容的第5行重命名。我在终端机上试过这个
for pdf in *.pdf
do
filename=`basename -s .pdf "${pdf}"`
newname=`awk 'NR==5' "${filename}.pdf"`
mv "${pdf}" "${newname}"
done它复制文件,但名称是无效字符串。我知道系统不把文件看作纯文本和图像,有元数据、xml标记等等。但是有没有办法从这一行中获取内容呢?
发布于 2017-10-13 14:37:30
开箱即用,bash及其常用的实用程序无法读取pdf文件。然而,less能够从pdf文件中恢复文本。您可以按以下方式更改脚本:
for pdf in *.pdf
do
mv "$pdf" "$(less $pdf | sed '5q;d').pdf"
done说明:
less "$pdf":显示pdf文件的文本部分。将考虑到的间距less是否返回所需的输出
sed '5q;d':提取输入文件的第5行或者,您可以使用以下脚本删除空行和超过空格:
mv "$pdf" "$(less "$pdf" | sed -e '/^\s*$/d' -e 's/ \+/ /g' | sed '5q;d').pdf"https://stackoverflow.com/questions/46731805
复制相似问题