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

时间:2017-10-13 14:07:38

标签: linux bash pdf rename batch-rename

我有多个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标签等等。但是有没有办法从该行获取内容?

1 个答案:

答案 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"