使用 linux 中特定内容行的名称批量重命名 pdf 文件
bulk rename pdf files with name from specific line of its content in linux
我有多个 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 标签等等。但是有没有办法从该行获取内容?
开箱即用,bash
及其常用实用程序无法读取 pdf 文件。但是,less
能够从 pdf 文件中恢复文本。您可以按如下方式更改脚本:
for pdf in *.pdf
do
mv "$pdf" "$(less $pdf | sed '5q;d').pdf"
done
解释:
less "$pdf"
: 显示pdf文件的文本部分。将考虑间距
- 进行一些测试以查看是否
less
returns 所需的输出
sed '5q;d'
: 提取输入文件的第5行
您可以选择使用以下脚本删除空行和超出的空格:
mv "$pdf" "$(less "$pdf" | sed -e '/^\s*$/d' -e 's/ \+/ /g' | sed '5q;d').pdf"
我有多个 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 标签等等。但是有没有办法从该行获取内容?
开箱即用,bash
及其常用实用程序无法读取 pdf 文件。但是,less
能够从 pdf 文件中恢复文本。您可以按如下方式更改脚本:
for pdf in *.pdf
do
mv "$pdf" "$(less $pdf | sed '5q;d').pdf"
done
解释:
less "$pdf"
: 显示pdf文件的文本部分。将考虑间距- 进行一些测试以查看是否
less
returns 所需的输出
- 进行一些测试以查看是否
sed '5q;d'
: 提取输入文件的第5行
您可以选择使用以下脚本删除空行和超出的空格:
mv "$pdf" "$(less "$pdf" | sed -e '/^\s*$/d' -e 's/ \+/ /g' | sed '5q;d').pdf"