我有从 ouput00035023031 到 output000035023035 的文件夹。我编写了 bash 脚本来遍历每个文件夹并进入文件夹。进入文件夹后,我想运行程序“barycorr”。它要求输入三个输入。输入是文件名*cl.evt
。代码如下:
for i in $(seq -f "%03g" 1 5); do
cd output0003502303$i
echo -e "sw00092413002xpcw3po_cl.evt
sw00092413002xpcw3po_cl_bary4.evt
sw00092413002sao.fits.gz" | barycorr ra=253.467570 dec=39.760169
cd ..
done
我需要首先输入文件名sw*pcw3po_cl.evt
,其次输入要保存的文件名,第三输入文件所在的sw*xpcw3po_cl_bary4.evt
路径。根据我所在的文件夹而变化。现在如何编写脚本以在每个文件夹中运行此程序。sw*sao.fits.gz
*
答案1
如果我理解正确的话,你应该能够做这样的事情:
for i in $(seq -f "%03g" 1 5); do
printf '%s\n' "output0003502303${i}/sw00092413${i}"{xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} |
barycorr ra=253.467570 dec=39.760169
done
解释:printf '%s\n'
将打印以下每个参数(部分%s
)后跟换行符(\n
) - 也就是说,每个参数都在单独的行上。printf
对于这样的事情,比 更易于控制echo
。
至于这些参数,每个参数都由文件夹名称和文件名前缀组成,然后{xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz}
部分扩展到每个后缀。本质上,它是以下内容的简写:
"output0003502303${i}/sw00092413${i}"xpcw3po_cl.evt
"output0003502303${i}/sw00092413${i}"xpcw3po_cl_bary4.evt
"output0003502303${i}/sw00092413${i}"sao.fits.gz
这是需要的吗?如果不是,请说明。