在 bash 中使用循环生成 pdftk 的参数

在 bash 中使用循环生成 pdftk 的参数

我想生成包含 n=1 到 k 的文件名列表,在其末尾添加字符串“cat output xyz.pdf”并将结果作为参数传递给pdftk.它应该执行如下:

pdftk file1.pdf file2.pdf file3.pdf cat output xyz.pdf

如何直接在 CLI 中自动执行此操作?

答案1

如果您使用问题标签所示的 bash,则不需要循环:您应该能够使用大括号扩展

前任。对于 k = 32

pdftk file{1..32}.pdf cat output xyz.pdf

如果文件数量为非常大,这种方法可能会受到限制ARG_MAX(导致“参数列表太长”错误)。

答案2

像这样的东西可能就是你所追求的:

#!/bin/bash

filelist=""

for i in {1..5}; do
    filelist+="file${i}.pdf "
done

pkftk ${filelist} cat output xyz.pdf

该循环从 1..k 开始运行并构建一个包含“file1.pdf ... filek.pdf”的字符串。循环完成后,它会pdftk传递文件列表以及您在问题中指定的“cat output xyz.pdf”。

如果你想要一句台词,你可以将上面的内容压缩为(这里假设k=5):

pdftk $(for i in {1..5}; do printf "%s " file$i.pdf; done) cat output.xyz.pdf

逻辑是相同的,但我使用命令替换来运行for循环; the被替换为(在本例中为文件列表)$(...)的输出。...我使用printf而不是echo作为避免换行的一种方式。

相关内容