bash 脚本循环遍历文件夹和文件

bash 脚本循环遍历文件夹和文件

我有从 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

这是需要的吗?如果不是,请说明。

相关内容