我有一个包含按月文件夹排列的卫星数据的数据集列表,如下所示:
01 02 03 04 05 06 07 08 09 10 11 12
这些文件夹进一步分为每日数据文件夹,例如第一个月01
,每日文件在文件夹中的排列如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
最终有数据集:
OMI-Aura_L2-PROFOZ_2016m0101t0059-o60970_v003-2016m0107t153711.he5.met OMI-Aura_L2-PROFOZ_2016m0101t1410-o60978_v003-2016m0107t153715.he5
OMI-Aura_L2-PROFOZ_2016m0101t0237-o60971_v003-2016m0107t153714.he5 OMI-Aura_L2-PROFOZ_2016m0101t1410-o60978_v003-2016m0107t153715.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0237-o60971_v003-2016m0107t153714.he5.met OMI-Aura_L2-PROFOZ_2016m0101t1549-o60979_v003-2016m0107t153713.he5
OMI-Aura_L2-PROFOZ_2016m0101t0416-o60972_v003-2016m0107t153715.he5 OMI-Aura_L2-PROFOZ_2016m0101t1549-o60979_v003-2016m0107t153713.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0416-o60972_v003-2016m0107t153715.he5.met OMI-Aura_L2-PROFOZ_2016m0101t1727-o60980_v003-2016m0107t153718.he5
OMI-Aura_L2-PROFOZ_2016m0101t0555-o60973_v003-2016m0107t153709.he5 OMI-Aura_L2-PROFOZ_2016m0101t1727-o60980_v003-2016m0107t153718.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0555-o60973_v003-2016m0107t153709.he5.met OMI-Aura_L2-PROFOZ_2016m0101t1906-o60981_v003-2016m0107t153716.he5
OMI-Aura_L2-PROFOZ_2016m0101t0734-o60974_v003-2016m0107t153717.he5 OMI-Aura_L2-PROFOZ_2016m0101t1906-o60981_v003-2016m0107t153716.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0734-o60974_v003-2016m0107t153717.he5.met OMI-Aura_L2-PROFOZ_2016m0101t2045-o60982_v003-2016m0107t153719.he5
OMI-Aura_L2-PROFOZ_2016m0101t0913-o60975_v003-2016m0107t153711.he5 OMI-Aura_L2-PROFOZ_2016m0101t2045-o60982_v003-2016m0107t153719.he5.met
OMI-Aura_L2-PROFOZ_2016m0101t0913-o60975_v003-2016m0107t153711.he5.met OMI-Aura_L2-PROFOZ_2016m0101t2224-o60983_v003-2016m0107t153717.he5
我只想提取具有.he5
扩展名的文件,并使用以下保留文件名的代码将其转换为 netcdf 文件。
ncks inputfile.he5 inputfile.nc
我正在尝试处理每个文件,所以我编写了一个 shell 脚本,如下所示
shopt -s globstar
for f in ./**; do
echo "$f" |grep -v .met | grep ".he5"
echo "$f" |grep -v .met |ncks $(grep".he5") $(echo $(grep -o 'OMI-Aura_L2-PROFOZ_[0-9]\{4\}m[0-9]\{4\}t[0-9]\{4\}-o[0-9]\{5\}_v003-[0-9]\{4\}m[0-9]\{4\}t[0-9]\{6\}').nc)
done
它能够提取文件名,但是我没有得到输出。我怎样才能最终转换所有文件?
答案1
您的命令过于复杂,您不需要任何grep
或类似的命令:
shopt -s globstar
for f in ./**/*.he5; do
ncks "$f" "${f%.*}.nc"
done
${f%.*}
删除以最后一个开头的所有字符.
答案2
尝试使用find
及其execdir
选项,它允许 find 将目录切换到文件找到的目录,然后在该文件的父目录中执行命令,如下所示:
find /path/to/source/directory -type f -name '*.he5' -execdir sh -c '
for file; do
ncks "${file}" ${file%.he5}.nc"
done
' sh_ncks {} +
语法${parameter%word}
是参数扩展,从其参数中删除最短的后缀。