Shell脚本复制多个文件

Shell脚本复制多个文件

我正在尝试编写一个可以复制一堆文件的 shell 脚本,但是在设置循环来读取这些文件时遇到了困难:

aws s3 cp s3://noaa-bdp-pds/gdas.YYYYMMDD/00/atmos/hdas.t00z.sfcf000.nc s3://s3internal/raw/HDAS/hdas.YYYYMMDD_00Z.nc

这里 YYYY、MM、DD 是我需要循环的数字。

我需要循环遍历所有年份、所有月份和日期来保存所有文件。请告诉我这是否可以做到?

谢谢

答案1

您可以使用aws s3 sync通配符来实现此目的并--dryrun产生输出:

$ aws s3 sync s3://noaa-bdp-pds . \
  --exclude "*" --include "gdas.*/00/atmos/hdas.t00z.sfcf000.nc"

(dryrun) download s3://noaa-bdp-pds/gdas.20210001/00/atmos/hdas.t00z.sfcf000.nc to noaa-bdp-pds /gdas.20210001/00/atmos/hdas.t00z.sfcf000.nc
 ...
 ...

请记住使用空目录,否则可能会干扰输出。

现在,你可以使用它来构造一个循环:

#!/bin/bash
for line in $( \
    aws s3 sync s3://noaa-bdp-pds . \
    --exclude "*" --include "gdas.*/00/atmos/hdas.t00z.sfcf000.nc" | awk '/s3:\/\//{print $3}' --dryrun \
); do
    [[ $line =~ .*/gdas.(.*)/00/.* ]] && \
    echo aws s3 cp ${BASH_REMATCH[0]} s3://s3internal/raw/HDAS/hdas.${BASH_REMATCH[1]}_00Z.nc
done

当您对结果满意时,删除echo复制的文件。

相关内容