I was recently on a project that made heavy use of Azure Blob Storage.
A requirement came up where we had to archive data. This involved moving entire directories around.
We used the Microsoft Azure Storage Data Movement Library. The library is cross-platform, open-source, and is designed for high-performance uploading, downloading and copying of Azure Storage Blobs and Files. This library is the core data movement framework that powers AzCopy.
The Data Movement Library provides methods that aren't available in the traditional .NET Azure Storage Client Library. This includes the ability to set the number of parallel operations, track transfer progress, easily resume a canceled transfer, and more.
I referenced the sample code in the GitHub repo. I didn't need most of the code in the samples, so I modified the BlobDirectoryCopySample method and retrofitted it for our needs.
The following is a stripped-down & modified version of the code put into a .NET Core 3.0 Console App for this post.
The API method that does the copy is CopyDirectoryAsync. I do not have specific metrics measuring performance, but everything worked fine for our requirements. If this was production code, the storage account would be read from Azure KeyVault and there would robust exception handling and logging.
This post went over using The Microsoft Azure Storage Data Movement Library to copy blobs from one directory to another.