Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
You can use the AzCopy v10 command-line utility to copy blobs, directories, and containers between storage accounts.
For examples of other types of tasks, such as uploading files, downloading blobs, and synchronizing with Blob storage, see the links in the Next Steps section of this article.
AzCopy uses server-to-server APIs, so data is copied directly between storage servers.
Get started
See the Get started with AzCopy article to download AzCopy and learn about the ways that you can provide authorization credentials to the storage service.
Note
The examples in this article assume that you provide authorization credentials by using Microsoft Entra ID and that your Microsoft Entra identity has the proper role assignments for both source and destination accounts.
Alternatively, you can append a SAS token to either the source or destination URL in each AzCopy command. For example: azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>'.
Guidelines
Apply the following guidelines to your AzCopy commands.
- If you use Microsoft Entra authorization for both source and destination, both accounts must belong to the same Microsoft Entra tenant. 
- Your client must have network access to both the source and destination storage accounts. - To learn how to configure the network settings for each storage account, see Configure Azure Storage firewalls and virtual networks. - To learn about supported network topologies when copying between accounts, see Copy blobs between storage accounts with access restriction. 
- If you copy to a premium block blob storage account, omit the access tier of a blob from the copy operation by setting the - s2s-preserve-access-tierto- false(For example:- --s2s-preserve-access-tier=false). Premium block blob storage accounts don't support access tiers.
- You can increase the throughput of copy operations by setting the value of the - AZCOPY_CONCURRENCY_VALUEenvironment variable. To learn more, see Increase Concurrency.
- If the source blobs have index tags, and you want to retain those tags, you need to reapply them to the destination blobs. For information about how to set index tags, see the Copy blobs to another storage account with index tags section of this article. 
Copy a blob
Copy a blob to another storage account by using the azcopy copy command.
Tip
This example encloses path arguments with single quotes (''). Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').
Syntax
azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<blob-path>'
Example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myTextFile.txt'
Example (Data Lake Storage endpoints)
azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer/myTextFile.txt'
The copy operation is synchronous. When the command returns, it indicates that all files are copied.
Copy a directory
Copy a directory to another storage account by using the azcopy copy command.
Tip
This example encloses path arguments with single quotes (''). Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').
Syntax
azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>/<directory-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' --recursive
Example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive
Example (Data Lake Storage endpoints)
azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer' --recursive
The copy operation is synchronous. When the command returns, all files are copied.
Copy a container
Copy a container to another storage account by using the azcopy copy command.
Tip
This example encloses path arguments with single quotes (''). Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').
Syntax
azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/<container-name>' --recursive
Example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive
Example (Data Lake Storage endpoints)
azcopy copy 'https://mysourceaccount.dfs.core.windows.net/mycontainer' 'https://mydestinationaccount.dfs.core.windows.net/mycontainer' --recursive
The copy operation is synchronous. When the command returns, all files are copied.
Copy containers, directories, and blobs
Copy all containers, directories, and blobs to another storage account by using the azcopy copy command.
Tip
This example encloses path arguments with single quotes (''). Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').
Syntax
azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.windows.net/' 'https://<destination-storage-account-name>.<blob or dfs>.core.windows.net/' --recursive
Example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/' 'https://mydestinationaccount.blob.core.windows.net' --recursive
Example (Data Lake Storage endpoints)
azcopy copy 'https://mysourceaccount.dfs.core.windows.net/' 'https://mydestinationaccount.dfs.core.windows.net' --recursive
The copy operation is synchronous. When the command returns, it indicates that all files are copied.
Copy blobs and add index tags
Copy blobs to another storage account and add blob index tags to the target blob.
If you're using Microsoft Entra authorization, assign the Storage Blob Data Owner role to your security principal, or give it permission to the Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write Azure resource provider operation through a custom Azure role. If you're using a Shared Access Signature (SAS) token, the token must provide access to the blob's tags through the t SAS permission.
To add tags, use the --blob-tags option with a URL encoded key-value pair.
For example, to add the key my tag and the value my tag value, add --blob-tags='my%20tag=my%20tag%20value' to the destination parameter.
Separate multiple index tags with an ampersand (&). For example, if you want to add the key my second tag and the value my second tag value, the complete option string would be --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'.
The following examples show how to use the --blob-tags option.
Tip
These examples enclose path arguments with single quotes (''). Use single quotes in all command shells except for the Windows Command Shell (cmd.exe). If you're using a Windows Command Shell (cmd.exe), enclose path arguments with double quotes ("") instead of single quotes ('').
Blob example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myTextFile.txt' --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'
Directory example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'
Container example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/mycontainer' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'
Account example
azcopy copy 'https://mysourceaccount.blob.core.windows.net/' 'https://mydestinationaccount.blob.core.windows.net' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'
The copy operation is synchronous. When the command returns, all files are copied.
Note
If you specify a directory, container, or account for the source, all the blobs that you copy to the destination have the same tags that you specify in the command.
Copy with optional flags
You can tweak your copy operation by using optional flags. Here's a few examples.
| Scenario | Flag | 
|---|---|
| Copy blobs as Block, Page, or Append Blobs. | --blob-type=[BlockBlob|PageBlob|AppendBlob] | 
| Copy to a specific access tier (such as the archive tier). | --block-blob-tier=[None|Hot|Cool|Archive] | 
| Automatically decompress files. | --decompress=[gzip|deflate] | 
For a complete list, see options.
Specify source and destination types
AzCopy uses the --from-to parameter to explicitly define the source and destination resource types when automatic detection might fail, such as in piping scenarios or emulators. This parameter helps AzCopy understand the context of the transfer and optimize accordingly.
| FromTo Value | Description | 
|---|---|
| BlobBlob | Copy between two Azure Blob Storage locations | 
| BlobBlobFS | Copy from Azure Blob Storage to Azure Data Lake Gen2 (BlobFS) | 
| BlobFSBlob | Copy from Azure Data Lake Gen2 (BlobFS) to Azure Blob Storage | 
| BlobFSBlobFS | Copy between two Azure Data Lake Gen2 (BlobFS) locations | 
| BlobFSFile | Copy from Azure Data Lake Gen2 (BlobFS) to Azure File Storage | 
| BlobFile | Copy from Azure Blob Storage to Azure File Storage | 
| FileBlob | Copy from Azure File Storage to Azure Blob Storage | 
| FileBlobFS | Copy from Azure File Storage to Azure Data Lake Gen2 (BlobFS) | 
Next steps
Find more examples in these articles:
- Examples: Upload
- Examples: Download
- Examples: Synchronize
- Examples: Amazon S3 buckets
- Examples: Google Cloud Storage
- Examples: Azure Files
See these articles to configure settings, optimize performance, and troubleshoot issues: