名前なしでファイルをS3にアップロードする方法

Aug 22 2020

Athenaを使用してS3バケットからデータを読み取っていますが、次のファイルのデータは正しいです。

# aws s3 ls --human s3://some_bucket/email_backup/email1/
2020-08-17 07:00:12    0 Bytes
2020-08-17 07:01:29    5.0 GiB email_logs_old1.csv.gz

以下に示すようにパスを_updatedに変更すると、エラーが発生します。

# aws s3 ls --human s3://some_bucket/email_backup_updated/email1/
2020-08-22 12:01:36    5.0 GiB email_logs_old1.csv.gz
2020-08-22 11:41:18    5.0 GiB  

これは、同じ場所に名前のない余分なファイルがあるためです。名前のないファイルをどうやってアップロードしたのかわかりません。私はそれを繰り返す方法を知りたいです(私がそれを避けることができるように)

回答

1 ChrisWilliams Aug 22 2020 at 12:24

すべてのS3ファイルには名前があります(実際、フルパスは実際にはオブジェクトキーであり、オブジェクト名を定義するためのメタデータです)。

パスに空白の名前付きファイルが表示されている場合は、。という名前のファイルをs3://some_bucket/email_backup_updated/email1/作成している可能性がありますs3://some_bucket/email_backup_updated/email1/

前に述べたように、S3オブジェクトはキーを使用するため、ファイル階層は存在しません。代わりに、プレフィックスでフィルタリングしているだけです。

末尾にスラッシュを付けずに次の手順を実行することで、これを検証できるはずaws s3 ls --human s3://some_bucket/email_backup_updated/email1です。

shantanuo Aug 23 2020 at 05:39

宛先パスの最後に改行なしスペースを追加すると、ファイルはS3にコピーされますが、名前は空白になります。例えば

aws s3 cp t.txt s3://some_bucket_123/email_backup_updated/email1/ 

(email1 /の後の改行しないスペースに注意してください)

\ xa0は、実際にはLatin1のノーブレークスペースであり、chr(160)でもあります。改行しないスペース自体がファイルの名前です。

同じロジックを使用して、最後に改行しないスペースを追加することにより、「スペース」ファイルを削除できます。

aws s3 rm  s3://some_bucket_123/email_backup_updated/email1/ 

コンソールにログインして、ユーザーインターフェイスから削除することもできます。