名前なしでファイルをS3にアップロードする方法
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
これは、同じ場所に名前のない余分なファイルがあるためです。名前のないファイルをどうやってアップロードしたのかわかりません。私はそれを繰り返す方法を知りたいです(私がそれを避けることができるように)
回答
すべての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
です。
宛先パスの最後に改行なしスペースを追加すると、ファイルは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/
コンソールにログインして、ユーザーインターフェイスから削除することもできます。