我們有超過 50k 個帶有回車符\r或
檔案名的檔案。一個例子
{
"LastModified": "2021-12-25T20:33:05.000Z",
"ETag": "\"653e05d2e10dffc122aa91a93b699413\"",
"StorageClass": "STANDARD",
"Key": "portalahm/zz9JDN3n.jpg\r",
"Owner": {
"ID": "e3fdea5553e3b1a5f37cea2df020a92c6a2efbadcdaf58a2589e930b85a95aff"
},
"Size": 1703936
},
任何人都可以提出如何使用CLI命令去除特殊字符這些檔案重命名aws s3 mv或者使用它們下載到的Windows系統s3api get-object或aws s3 cp?
使用mv或下載物件的所有重命名嘗試都Key does not exist出錯。
TIA
uj5u.com熱心網友回復:
使用下面的腳本批量重命名檔案,它將用 \r 修剪檔案名
#############################
# Configuration:
bucketname = "YOUR_S3_BUCKET_NAME"
access_key = 'YOUR_ACCESS_KEY_ID'
secret_key = 'YOUR_SECRET_ACCESS_KEY'
#############################
require 'rubygems'
require 'aws/s3'
include AWS::S3
Base.establish_connection!(
:access_key_id => access_key,
:secret_access_key => secret_key
)
b = Bucket.find(bucketname)
marker = ''
while b.size > 0 do
puts "\n\n--------------------new page----------------------"
puts "\n From marker #{marker}"
puts "\n\n--------------------------------------------------"
b.each {|s3o|
if s3o.key =~ /\r/i
begin
old_key = s3o.key
new_key = s3o.key.gsub(/\r/i, '')
S3Object.copy(old_key, new_key, bucketname)
puts "copied #{old_key} to #{new_key}"
#Uncomment this if you're feeling confident and want to delete the key
#s3o.delete
rescue Exception => e
puts "\n\n @@@@@@@@@@@@ EXCEPTION on key #{s3o.key} \n\n"
puts e.message
puts "@@@@@@@@@@@@@@}"
next
end
end
}
marker = b.objects.last.key
b = Bucket.find('
uj5u.com熱心網友回復:
我無法完全重現您的情況\r,但我設法\n通過將 CR 插入物件鍵來做到這一點。因此,這里有一個 Python 腳本,它應該能夠為您復制檔案:
import boto3
s3_resource = boto3.resource('s3')
for object in s3_resource.Bucket('my-bucket').objects.all():
if '\r' in object.key:
new_object = s3_resource.Object(object.bucket_name, object.key.replace('\r', ''))
new_object.copy({'Bucket': object.bucket_name, 'Key': object.key})
print(object.key, new_object.key)
# object.delete() # Remove comment-marker to delete source object after copy
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403106.html
標籤:
