public async Task BulkMoveItems() { // ARRANGE string bucket = sourceBucket; //string bucket = "mhaken-9fc61dff-1893-42cc-a82f-8024960b158e"; Stopwatch sw = new Stopwatch(); int count = 10000; try { sw.Start(); await CreateAndFillBucket(count); sw.Stop(); Debug.Print($"Finished creating and filling bucket {bucket} in {sw.Elapsed}."); sw.Reset(); ListObjectsV2Request list = new ListObjectsV2Request() { BucketName = bucket }; sw.Start(); IEnumerable <S3Object> objects = (await client.ListAllObjectsAsync(list)).SelectMany(x => x.S3Objects); // ACT BulkMoveRequest request = new BulkMoveRequest(objects.Select(x => new CopyObjectRequest() { SourceBucket = x.BucketName, DestinationBucket = x.BucketName, SourceKey = x.Key, DestinationKey = "moved_" + x.Key, StorageClass = S3StorageClass.OneZoneInfrequentAccess, })) { PreferMultipart = true }; BulkCopyResponse response = await client.BulkMoveAsync(request); sw.Stop(); File.WriteAllText("results.txt", $"Successfully moved {count} items in {sw.Elapsed}."); // ASSERT Assert.Equal(objects.Count(), response.SuccessfulOperations.Count); } catch (Exception e) { } finally { await client.EmptyBucketAsync(bucket); await client.DeleteBucketAsync(bucket); } }