如何使用gsutil下载GCS存储桶中指定日期范围内的文件
GCS存储桶按日期范围筛选下载文件的方案
方法1:使用gsutil工具直接筛选(推荐)
gsutil 原生支持按对象生成时间过滤,无需额外编写脚本,适合绝大多数场景:
- 下载指定日期之后创建的所有文件示例:
示例场景:下载UTC时间2024年3月1日0点之后创建的所有文件,存储桶路径为gs://<你的存储桶名称>/<可选前缀>/,本地保存路径为./local_dir/
执行命令:gsutil -m cp -r --include-if-generated-after 2024-03-01T00:00:00Z gs://<你的存储桶名称>/<可选前缀>/* ./local_dir/
参数说明:-m:开启多线程并行传输,大幅提升数千个文件的下载速度--include-if-generated-after:仅下载生成时间晚于指定UTC时间的文件,时间需遵循ISO 8601格式,若使用北京时间筛选,需先将目标时间减8小时转换为UTC时间
- 下载指定日期区间内创建的所有文件示例:
示例场景:下载UTC时间2024年3月1日0点到2024年3月15日23点59分59秒之间创建的文件
执行命令:gsutil -m cp -r --include-if-generated-after 2024-03-01T00:00:00Z --include-if-generated-before 2024-03-15T23:59:59Z gs://<你的存储桶名称>/<可选前缀>/* ./local_dir/
方法2:旧版gsutil适配方案
若你使用的gsutil版本过低不支持上述过滤参数,可以通过列出文件后二次筛选的方式实现:
- 先导出存储桶内所有文件的生成时间与路径到临时文件
gsutil ls -l gs://<你的存储桶名称>/<可选前缀>/ | grep -v "^TOTAL" | awk '{print $1,$3}' > gcs_file_list.txt - 筛选符合日期要求的文件并下载,以下示例筛选2024年3月1日之后创建的文件
cat gcs_file_list.txt | while read -r gen_time file_path; do if [[ $gen_time > "2024-03-01" ]]; then gsutil cp $file_path ./local_dir/; fi done
注意:该方案仅适合文件名不含特殊字符、空格的场景,若文件名存在特殊格式需调整awk和循环部分的解析逻辑。
内容的提问来源于stack exchange,提问作者A. K.
相关产品推荐
相关产品推荐

