我有多个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
它复制文件,但name是无效的字符串。我知道系统没有将文件看作纯文本和图像,有元数据,xml标签等等。但是有没有办法从该行获取内容?
答案 0 :(得分:2)
开箱即用,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"