我想生成包含 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
作为避免换行的一种方式。