要转换管道命令输出?

要转换管道命令输出?

我有一个文件夹,其中包含格式为 file(0).jpg 到 file(100).jpg 的文件

我不能在这里直接使用convert生成pdf,因为顺序最终是0,1,100,2,20,21,...

echo *.jpg(n)给出正确的文件顺序。

我如何将其通过管道转换?

我努力了echo *.jpg(n) | convert - out.pdf

答案1

如果您要执行的命令是

convert 'file(0).jpg' 'file(1).jpg' ...etc... 'file(100).jpg' out.pdf

然后要么使用你的 glob,

convert ./*.jpg(n) out.pdf

或者只包含 0..100 范围内与该模式匹配的文件:

convert 'file('<0-100>').jpg'(n) out.pdf

或者你可以使用大括号扩展:

convert 'file('{0..100}').jpg' out.pdf

但请注意,这不是通配,无论是否是现有文件的名称,都将传递到file(0).jpgto 的字符串进行转换。file(100).jpg与前一个相反,它还会丢失名为file(012).jpgexample 的文件。

答案2

如果你有很多文件,这会导致你遇到操作系统的命令行限制,你应该使用“文件名引用”功能convert@

generate the list of files ... | convert @- out.pdf

*.jpg(n)在不支持glob的 shell 上zsh,您可以使用以下命令以正确的顺序生成文件列表:

echo 'file('?').jpg' 'file('??').jpg' 'file('???').jpg' | convert @- out.pdf

或者使用支持大括号扩展的 shell:

echo 'file('{?,??,???}').jpg' | convert @- out.pdf

与此不同的是{1..100},它只会匹配存在的文件。由于echo它内置于大多数 shell 中,因此不受操作系统命令行限制,因此这种构造可能会变成有用的 UUoE。

相关内容