脚本将 2 个文件合并为 1 个文件并重复,直到文件夹中的所有 500 个文件合并为 250 个文件
script to combine 2 files into 1 file and repeat until all the 500 files in the folder are combined into 250 files
我有一个包含 500 个 pdf 文件的文件夹。我需要将 2 个文件合并为 1 个文件并创建 250 个 pdf 文件
file1.pdf + file2.pdf >> combined1.pdf
file3.pdf + file4.pdf >> combined2.pdf
file499.pdf + file500.pdf >> combined250.pdf
有人可以帮忙编写一个简单的 sh 脚本吗?
不清楚您所说的“合并”是什么意思。我猜你不能只连接两个 PDF 文件。但是除此之外,还有这样的事情吗?
for this in file{[1-9],[1-9][0-9],[1-9][0-9][0-9]}.pdf; do
case $this in
*[13579].pdf)
prev=$this; continue;;
*) base=${this%.pdf}
cat "$prev" "$this" >combined$((${base#file} / 2)).pdf;;
esac
done
显然,将愚蠢的 cat
替换为可以将两个 PDF 文件正确组合成一个有效的单个 PDF 文件的东西。 Merge / convert multiple PDF files into one PDF 有一些命令,但我会留给您选择安装哪一个。
复杂的通配符file{...}.pdf
是因为我们希望文件按照数字顺序列出,所以不能简单地使用file*.pdf
.
大括号扩展 file{[1-9],[1-9][0-9],etc}.pdf
是一个 Bash 功能。如果不使用Bash,拼写出来,比如file[1-9].pdf file[1-9][0-9].pdf fileetc.pdf
当我们查看编号为奇数的文件名时,我们只是将其保存以供下一次迭代使用,并跳过循环的其余部分。当我们看到一个偶数编号的文件时,我们将其与我们从上一次奇数迭代中记住的文件结合起来。
(显然,如果你有奇数个文件,最后一个将被跳过。)
parameter expansion ${this%.pdf}
returns $this
的值加上 .pdf
后缀 trimmed 关闭。然后我们执行另一个参数扩展 ${base#file}
到 trim 结果中的静态前缀 file
,只产生文件名中的数字。然后我们将其除以 2 以生成组合文件的编号。符号 $(( ... ))
生成一个 算术上下文 ,其中计算简单的整数算术表达式。 (否则 shell 根本不会计算数值表达式。)
如果您的真实姓名被命名为 something1.pdf
而不是 file1.pdf
等,请在通配符和替换 ${base#something}
.
中替换 file
我有一个包含 500 个 pdf 文件的文件夹。我需要将 2 个文件合并为 1 个文件并创建 250 个 pdf 文件
file1.pdf + file2.pdf >> combined1.pdf
file3.pdf + file4.pdf >> combined2.pdf
file499.pdf + file500.pdf >> combined250.pdf
有人可以帮忙编写一个简单的 sh 脚本吗?
不清楚您所说的“合并”是什么意思。我猜你不能只连接两个 PDF 文件。但是除此之外,还有这样的事情吗?
for this in file{[1-9],[1-9][0-9],[1-9][0-9][0-9]}.pdf; do
case $this in
*[13579].pdf)
prev=$this; continue;;
*) base=${this%.pdf}
cat "$prev" "$this" >combined$((${base#file} / 2)).pdf;;
esac
done
显然,将愚蠢的 cat
替换为可以将两个 PDF 文件正确组合成一个有效的单个 PDF 文件的东西。 Merge / convert multiple PDF files into one PDF 有一些命令,但我会留给您选择安装哪一个。
复杂的通配符file{...}.pdf
是因为我们希望文件按照数字顺序列出,所以不能简单地使用file*.pdf
.
大括号扩展 file{[1-9],[1-9][0-9],etc}.pdf
是一个 Bash 功能。如果不使用Bash,拼写出来,比如file[1-9].pdf file[1-9][0-9].pdf fileetc.pdf
当我们查看编号为奇数的文件名时,我们只是将其保存以供下一次迭代使用,并跳过循环的其余部分。当我们看到一个偶数编号的文件时,我们将其与我们从上一次奇数迭代中记住的文件结合起来。
(显然,如果你有奇数个文件,最后一个将被跳过。)
parameter expansion ${this%.pdf}
returns $this
的值加上 .pdf
后缀 trimmed 关闭。然后我们执行另一个参数扩展 ${base#file}
到 trim 结果中的静态前缀 file
,只产生文件名中的数字。然后我们将其除以 2 以生成组合文件的编号。符号 $(( ... ))
生成一个 算术上下文 ,其中计算简单的整数算术表达式。 (否则 shell 根本不会计算数值表达式。)
如果您的真实姓名被命名为 something1.pdf
而不是 file1.pdf
等,请在通配符和替换 ${base#something}
.
file