如何对范围内的每个数字运行命令

如何对范围内的每个数字运行命令

我想做类似的事情

specmd file5.awe
specmd file6.awe
specmd file7.awe
specmd file8.awe
specmd file9.awe
specmd file10.awe
specmd file11.awe
specmd file12.awe

有没有好的方法可以做到这一点?我能想到的最好的方法是

ruby -e "10.upto(15){|i| puts i}" | xargs -I {} specmd file{}.awe

这显然不是一个很好的方法,因为它依赖于 ruby​​,并且在这种情况下感觉 ruby​​ 应该是不必要的。

注意:还有更多文件(例如:file4.awefile13.awe想要,所以任何通配符(可能?)都不会做我想要的。

答案1

在 bash 中,您可以使用内置命令创建循环来迭代范围:

for i in {5..12}
do 
    specmd file${i}.awe
done

对于其他类似的情况还有更多选择,我将在此处留下一个链接。

http://www.cyberciti.biz/faq/bash-for-loop/

答案2

我知道这是一个老问题,但我无法抗拒。

不需要 for 循环,不需要 while 循环,只需纯命令行 bash:

echo file{5..12}.awe | xargs -n1 specmd

答案3

for f in file[5-9].awe file1[012].awe
do  : stuff with "$f" files
done

...不是全部全局是相等的。

否则你可以这样做:

x=4
while  [ 13 -gt "$((x+=1))" ]
do     : stuff with "file$x.awe"
done

...它的优点是在迭代时生成迭代器,并且默认情况下可以在几乎任何脚本化 shell 中工作(对于 glob 也是如此)

答案4

使用 GNU Parallel 时,它看起来像这样:

parallel specmd file{}.awe ::: {5..12}
seq 5 12 | parallel specmd file{}.awe
parallel specmd ::: file{5..12}.awe

相关内容