将 AWS CLI 与 --recursive 一起使用时,有没有办法删除文件扩展名?

问题描述 投票:0回答:1

我正在尝试使用 AWS CLI 将 parquet 文件递归上传到 AWS S3 存储桶。我想删除 .parquet 并使用文件名作为目标表名称。

因此,在 table1.parquet、table2.parquet 的目录中,我要运行如下所示的内容:

aws s3 cp ./MyDir s3://mybucket/ --recursive

我收到以下错误,这是有道理的,因为预期的表是 table1 而不是 table1.parque:

s3://mybucket/table1.parquet is not found

理想情况下,我可以在 CLI 语句中指定文件名更改为 table1、table2 等的位置:

aws s3 cp ./MyDir s3://mybucket/{filename} --recursive
amazon-web-services amazon-s3 command-line-interface aws-cli
1个回答
0
投票

AWS CLI 没有在上传过程中直接重命名文件的内置功能。但是,您可以通过使用脚本来实现您的目标。这是 Bash 中的一个简单脚本,用于将 Parquet 文件上传到 S3 并通过删除 .parquet 扩展名来重命名它们:

#!/bin/bash

# Directory containing the Parquet files
SOURCE_DIR="./MyDir"
# Target S3 bucket
S3_BUCKET="s3://mybucket/"

# Loop through all .parquet files in the directory
for filepath in "$SOURCE_DIR"/*.parquet; do
  # Extract the filename without the path
  filename=$(basename "$filepath")
  
  # Remove the .parquet extension
  target_name="${filename%.parquet}"

  # Upload the file to S3 with the new name
  aws s3 cp "$filepath" "$S3_BUCKET$target_name"
  
  if [ $? -eq 0 ]; then
    echo "Uploaded $filepath as $target_name"
  else
    echo "Failed to upload $filepath"
  fi
done

这会将 ./MyDir 目录中的所有 .parquet 文件上传到您的 S3 存储桶,并使用文件名(不带 .parquet)作为密钥。

© www.soinside.com 2019 - 2024. All rights reserved.