我想做类似的事情
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.awe
、file13.awe
)不想要,所以任何通配符(可能?)都不会做我想要的。
答案1
在 bash 中,您可以使用内置命令创建循环来迭代范围:
for i in {5..12}
do
specmd file${i}.awe
done
对于其他类似的情况还有更多选择,我将在此处留下一个链接。
答案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