繁体   English   中英

在多个文件上运行shell脚本作为输入

[英]Running a shell script on several files as inputs

我有以下格式的shell命令:

my_cmd -I file1.inp -O file1.out

file1.inp上进行一些处理并将结果存储在file1.out

在我的主目录中,我有许多格式为*.inp文件,我想对所有文件都运行此命令并将结果存储到*.out 我只能使用shell脚本来实现吗?

您可以使用一个简单的循环:

for file in *.inp ; do
    my_cmd -I "${file}" -O "${file%%.inp}.out"
done

${file%%.inp}是所谓的参数扩展 它将有效地从输入文件名中删除扩展名.inp


一件事(感谢Jean-FrançoisFabre)。 如果该文件夹不包含任何.inp文件,则上述循环将以$file的文字值*.inp运行一次。 为避免这种情况,您需要设置nullglob选项:

shopt -s nullglob # set the nullglob option
for file in *.inp ; do
    my_cmd -I "${file}" -O "${file%%.inp}.out"
done
shopt -u nullglob # unset the nullglob option

使用GNU parallel

parallel my_cmd -I {} -O {.}.out ::: *.inp

默认情况下,这将并行作业,每个核心一个作业。 {}是不变的参数, {.}是相同的参数减去其扩展名。 参数取自:::的单词。

ls *.inp| xargs -l1 -I % my_cmd -I % -O %.out

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM