giw*_*lus 2 zsh pipe imagemagick
我有一个包含格式 file(0).jpg 到 file(100).jpg 的文件的文件夹
我不能在这里直接使用 convert 生成 pdf,因为顺序最终是 0,1,100,2,20,21,...
echo *.jpg(n)
给出正确的文件顺序。
我如何通过管道将其转换为转换?
我试过了 echo *.jpg(n) | convert - out.pdf
如果您要执行的命令是
convert 'file(0).jpg' 'file(1).jpg' ...etc... 'file(100).jpg' out.pdf
Run Code Online (Sandbox Code Playgroud)
然后要么使用你的 glob,
convert ./*.jpg(n) out.pdf
Run Code Online (Sandbox Code Playgroud)
或者只包含 0..100 范围内与该模式匹配的文件:
convert 'file('<0-100>').jpg'(n) out.pdf
Run Code Online (Sandbox Code Playgroud)
或者您可以使用大括号扩展:
convert 'file('{0..100}').jpg' out.pdf
Run Code Online (Sandbox Code Playgroud)
但请注意,它不是通配符,字符串file(0).jpg
通过对file(100).jpg
将传递给不管这些是否是现有的文件或没有的名称转换。与前一个相反,它也会丢失file(012).jpg
例如命名的文件。
小智 5
如果你有很多文件,这会导致你遇到操作系统的命令行限制,你应该使用convert
“@
文件名引用”功能:
generate the list of files ... | convert @- out.pdf
Run Code Online (Sandbox Code Playgroud)
*.jpg(n)
在不支持glob 的shell 上zsh
,您可以使用以下命令以正确的顺序生成文件列表:
echo 'file('?').jpg' 'file('??').jpg' 'file('???').jpg' | convert @- out.pdf
Run Code Online (Sandbox Code Playgroud)
或者使用支持大括号扩展的 shell:
echo 'file('{?,??,???}').jpg' | convert @- out.pdf
Run Code Online (Sandbox Code Playgroud)
与此不同的是,{1..100}
它只会匹配存在的文件。由于echo
它内置于大多数 shell 中,因此不受操作系统命令行限制,因此这种构造可能会变成有用的 UUoE。