Bash - 将已排序的glob传递给命令输入

时间:2014-01-30 16:15:57

标签: bash

我有一系列文件名为

的图片
motorist_intensity_2.jpg
 ...
 ...
motorist_intensity_256.jpg

ad我想使用ImageMagick从他们制作动画gif。现在,命令

convert -delay 100 -loop 0 motorist_intensity_* motorist.gif

有效,但帧不按排序顺序排列。我可以使用

生成一个排序文件列表
ls motorist_intensity_* | sort -n -t _ -k 3

但是如何将该列表传递给covert commad代替原始motorist_intensity_*

2 个答案:

答案 0 :(得分:4)

您可以使用大括号扩展按照您想要的顺序进行扩展:

convert -delay 100 -loop 0 motorist_intensity_{2..256}.gif motorist.gif

答案 1 :(得分:3)

以下内容应该有效:

convert -delay 100 -loop 0 `ls motorist_intensity_* | sort -n -t _ -k 3` motorist.gif

通过将命令ls ...etc放在后引号中,它将被执行并插入输出

<强>更新

最好使用$()技术来评估表达式(参见下面的评论);另外,我并非100%确定sort的输出不会包含扰乱你的换行符。解决这两个问题:

convert -delay 100 -loop 0 $(ls motorist_intensity_* | sort -n -t _ -k 3 | xargs echo ) motorist.gif

xargs echo是一个很好的简写,用于“依次获取输入的每一行输出,并在没有换行符的情况下将它们回显到输出”。这是我将多行转换为单行的首选方法(尽管还有很多其他行)。

PS - 如果文件名包含换行符,则无法解决问题。我假设他们没有...