azcopy sync

将源位置复制到目标位置。 本文提供有关 azcopy sync 命令的详细参考。 若要详细了解如何在源位置和目标位置之间同步 blob,请参阅使用 AzCopy v10 与 Azure Blob 存储同步。 对于 Azure 文件存储,请参阅同步文件

注意

AzCopy 不支持在传输期间主动更改源或目标的情况。

摘要

上次修改时间用于比较。 如果目标中的上次修改时间与当前时间更近,则会跳过文件。 或者,可以使用 --compare-hash 标志仅传输 MD5 哈希不同的文件。 支持的配对包括:

  • 本地 <-> Azure Blob / Azure 文件(可以使用 SAS 或 OAuth 身份验证)
  • Azure Blob <-> Azure Blob(可以使用 SAS 或 OAuth 身份验证)
  • Azure 文件 <-> Azure 文件(源必须包含 SAS 或可公开访问;应将 SAS 身份验证用于目标)
  • Azure Blob <-> Azure 文件

sync 命令与 copy 命令的不同之处体现在以下几个方面:

  1. 默认情况下,递归标志为 true,sync 会复制所有子目录。 如果递归标志为 false,则 sync 只复制目录中的顶级文件。
  2. 在虚拟目录之间同步时,如果存在与某个虚拟目录同名的 Blob,则在路径中添加一个尾随斜杠(参考示例)。
  3. 如果将“delete-destination”标志设置为 true 或 prompt,sync 将删除目标中存在的、但源中不存在的文件和 Blob。

指南

默认情况下,sync 命令会比较文件名和上次修改的时间戳。 可以通过使用 --compare-hash 标志替代该行为,从而使用 MD5 哈希而不是上次修改的时间戳。 如果将 --delete-destination 可选标志设置为 trueprompt 值,当目标目录中的文件不在源目录中存在时,会删除这些文件。

  • 如果将 --delete-destination 标志设置为 true,AzCopy 将删除文件且不提供提示。 若要在 AzCopy 删除文件之前显示提示,请将 --delete-destination 标志设置为 prompt

  • 如果计划将 --delete-destination 标志设置为 promptfalse,请考虑使用 copy 命令而不是 sync 命令,并将 --overwrite 参数设置为 ifSourceNewercopy 命令占用的内存较少,且费用较低,因为在移动文件之前,复制操作无需为源或目标编制索引。

  • 如果不计划使用 --compare-hash 标志,运行 sync 命令的计算机应具有准确的系统时钟,因为上次修改时间对于确定是否应传输文件至关重要。 如果你的系统有严重的时钟偏差,请避免修改目标中的文件的时间与计划运行 sync 命令的时间太过接近。

  • AzCopy 使用服务器到服务器 API 在存储帐户之间同步数据。 这意味着数据直接在存储服务器之间复制。 但是,AzCopy 会设置和监视每个传输。对于较大的存储帐户(例如包含数百万个 blob 的帐户),AzCopy 可能需要大量计算资源才能完成这些任务。 因此,如果从虚拟机 (VM) 运行 AzCopy,请确保 VM 有足够的核心/内存来处理负载。

  • 对于 Blob 存储,你可以通过确保在使用 --delete-destination=prompt|true 标志之前启用软删除功能,防止意外删除。

高级

请注意,如果未指定文件扩展名,则在从本地磁盘上传时,AzCopy 会根据文件扩展名或内容自动检测文件的内容类型。

内置的查找表较小,但在 Unix 上,已通过采用以下一个或多个名称的本地系统 mime.types 文件(如果可用)扩充了该查找表:

  • /etc/mime.types
  • /etc/apache2/mime.types
  • /etc/apache/mime.types

在 Windows 上,MIME 类型是从注册表提取的。

默认情况下,除非使用 --compare-hash 标志替代该默认行为,否则同步仅从上次修改时间开始生效。 因此,对于 Azure 文件 <-> Azure 文件,将使用标头字段 Last-Modified 而非 x-ms-file-change-time,这意味着源上的元数据更改也可以触发完整副本。

azcopy sync [flags]

示例

同步单个文件:

azcopy sync "/path/to/file.txt" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]"

与前面的示例相同,但还会计算文件内容的 MD5 哈希,然后将该 MD5 哈希另存为 Blob 的 Content-MD5 属性。

azcopy sync "/path/to/file.txt" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]" --put-md5

同步整个目录,包括其子目录(请注意,默认已启用递归):

azcopy sync "/path/to/dir" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]"azcopy sync "/path/to/dir" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]" --put-md5

仅同步目录内的文件,但不同步子目录或子目录中的文件:

azcopy sync "/path/to/dir" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]" --recursive=false

同步目录中的一部分文件(例如:仅同步 jpg 和 pdf 文件,或者同步文件名为“exactName”的文件):

azcopy sync "/path/to/dir" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]" --include-pattern="*.jpg;*.pdf;exactName"

同步整个目录,但从同步范围中排除某些文件(例如:以 foo 开头或以 bar 结尾的每个文件):

azcopy sync "/path/to/dir" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]" --exclude-pattern="foo*;*bar"

同步单个 Blob:

azcopy sync "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]?[SAS]" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/blob]"

同步虚拟目录:

azcopy sync "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]?[SAS]" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]" --recursive=true

同步与 Blob 同名的虚拟目录(在路径中添加尾随斜杠以消除歧义):

azcopy sync "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]/?[SAS]" "https://[account].blob.core.chinacloudapi.cn/[container]/[path/to/virtual/dir]/" --recursive=true

同步 Azure 文件目录(语法与 Blob 相同):

azcopy sync "https://[account].file.core.chinacloudapi.cn/[share]/[path/to/dir]?[SAS]" "https://[account].file.core.chinacloudapi.cn/[share]/[path/to/dir]" --recursive=true

注意:如果同时使用 include 和 exclude 标志,则只使用与 include 模式匹配的文件,而忽略与 exclude 模式匹配的文件。

选项

--block-size-mb(浮点数)- 在上传到 Azure 存储或从 Azure 存储下载时使用此块大小(以 MiB 为单位)。 默认值根据文件大小自动计算。 允许使用小数(例如:0.25)。 在上传或下载时,允许的最大块大小为 0.75 * AZCOPY_BUFFER_GB。 有关详细信息,请参阅优化内存使用

--check-md5(字符串)- 指定下载时验证 MD5 哈希的严格程度。 此选项仅在下载时可用。 可用的值包括:NoCheck、LogOnly、FailIfDifferent、FailIfDifferentOrMissing。 (默认值为“FailIfDifferent”)。 (默认值为“FailIfDifferent”)

--compare-hash(字符串):通知同步依赖哈希作为上次修改时间 (LMT) 的替代内容。 远程源处缺少哈希将会引发错误。 (None, MD5) Default: None (default "None")

--cpk-by-name(字符串)- 客户端按名称提供的密钥使客户端可以向 Azure Blob 存储发出请求,以便按每个请求提供加密密钥。 提供的密钥名称将从 Azure 密钥保管库提取,并用于对数据进行加密

--cpk-by-value - 客户端按名称提供的密钥使客户端可以向 Azure Blob 存储发出请求,以便按每个请求提供加密密钥。 提供的密钥及其哈希将从环境变量中提取

--delete-destination(字符串)- 定义是否从目标中删除不在源中的多余文件。 可设置为 true、false 或 prompt。 如果设置为 prompt,则在计划要删除的文件和 Blob 之前,系统会向用户提问。 (默认值为“false”)。 (默认值为“false”)

--dry-run - 输出 sync 命令复制或删除的文件的路径。 此标志不会复制或删除实际文件。

--exclude-attributes(字符串)(仅限 Windows)- 排除其特性与特性列表相匹配的文件。 例如:A;S;R

--exclude-path(字符串)- 将源与目标进行比较时,排除这些路径。 此选项不支持通配符 (*)。 检查相对路径前缀(例如:myFolder;myFolder/subDirName/file.pdf)。

--exclude-pattern(字符串)- 排除名称与模式列表相匹配的文件。 例如: .jpg; .pdf;exactName

--exclude-regex(字符串)- 排除与正则表达式匹配的文件的相对路径。 使用“;”分隔正则表达式。

--force-if-read-only 在 Windows 或 Azure 文件存储上覆盖现有文件时,即使现有文件已设置只读属性,也会强制执行覆盖操作。

--from-to(字符串)-(可选)指定源-目标组合。 例如 LocalBlob、BlobLocal、LocalFile、FileLocal、BlobFile、FileBlob 等。

-h--help - 关于同步的帮助

--include-attributes(字符串)-(仅限 Windows)仅包括其属性与属性列表相匹配的文件。 例如:A;S;R

--include-pattern(字符串)- 仅包括名称与模式列表相匹配的文件。 例如: .jpg; .pdf;exactName

--include-regex(字符串)- 包括与正则表达式匹配的文件的相对路径。 使用“;”分隔正则表达式。

--hash-meta-dir:当使用 --local-hash-storage-mode=HiddenFiles 时,你可以指定一个备用目录来存储哈希元数据文件(而不是将其存储在源中相关文件旁)。

--local-hash-storage-mode:指定缓存文件哈希的替代方法。 有效选项包括:HiddenFiles (OS Agnostic)XAttr (Linux/MacOS only(在源位置遍历的所有文件系统上都需要 user_xattr)、AlternateDataStreams(仅限 Windows。需要目标卷上的命名流)。

--mirror-mode - 如果此标志设置为 true,则禁用上次修改时间比较,并覆盖目标上的冲突文件和 blob。 默认值为 false

--put-blob-size-mb 将此大小(以 MiB 指定)用作阈值,以确定在上传到 Azure 存储时是否将 blob 作为单个 PUT 请求上传。 默认值是根据文件大小自动计算的。 允许使用小数(例如:0.25)。

--preserve-permissions - 默认值为 false。 保留感知资源(Windows 和 Azure 文件存储,或 ADLS Gen 2 和 ADLS Gen 2)之间的 ACL。 对于分层命名空间帐户,需要一个拥有“修改所有权”和“修改权限”权限的容器 SAS 或 OAuth 令牌。 对于下载操作,还需要使用 --backup 标志来恢复权限,其中新所有者将不是运行 AzCopy 的用户。 此标志同时适用于文件和文件夹,除非指定了“仅文件”筛选器(例如包含模式)。

--preserve-posix-properties- - 默认值为 false。 将从 stat 或 statx 收集的属性信息 Preserves 到对象元数据中。

--preserve-smb-info - 对于 SMB 感知位置,默认情况下,标志将设置为 true。 保留 SMB 感知资源(Azure 文件存储)之间的 SMB 属性信息(上次写入时间、创建时间、属性位)。 此标志同时适用于文件和文件夹,除非指定了“仅文件”筛选器(例如包含模式)。 为文件夹传输的信息与为文件传输的信息几乎相同,只是“上次写入时间”除外,不会为文件夹保留该信息。 (默认值为 true)

--put-md5 - 创建每个文件的 MD5 哈希,并将该哈希另存为目标 Blob 或文件的 Content-MD5 属性。 (默认不会创建哈希。)仅在上传时可用。

--recursive - 默认值为 true,即,在目录之间同步时,将以递归方式查看子目录。 (默认值为 true)。 (默认值为 true)

--s2s-preserve-access-tier - 在服务间复制过程中保留访问层。 请参阅 Azure Blob 存储:热、冷和存档访问层,确保目标存储帐户支持设置访问层。 如果不支持设置访问层,请使用 s2sPreserveAccessTier=false 来绕过访问层的复制。 (默认值为 true)。 (默认值为 true)

--s2s-preserve-blob-tags - 在 blob 存储之间进行服务到服务同步过程中保留索引标记

--trailing-dot:默认情况下启用,以便以安全方式处理文件共享相关操作。 可用选项:EnableDisable。 选择 Disable 可返回到对尾随点文件的旧式处理(可能不安全),其中文件服务将剪裁路径中的任何尾随点。 如果传输包含两个仅相差一个尾随点的路径(例如 mypathmypath.),这可能导致潜在的数据损坏。 如果此标志设置为 Disable 并且 AzCopy 遇到尾随点文件,它将在扫描日志中警告客户,但不会尝试中止操作。 如果目标不支持尾随点文件(Windows 或 Blob 存储),当尾随点文件是传输的根目录时,AzCopy 将失败,并跳过枚举期间遇到的任何尾随点路径。

从父命令继承的选项

--log-level(字符串)- 定义日志文件的日志详细程度,可用级别:INFO(所有请求和响应)、WARNING(响应缓慢)、ERROR(仅限失败的请求)和 NONE(无输出日志)。 (默认值为 INFO)。 (默认值为“INFO”)

--cap-mbps(浮动)以兆位/秒为单位限制传输速率。 瞬间吞吐量可能与上限略有不同。 如果此选项设置为零或被省略,则吞吐量不受限制。

--output-type(字符串)命令输出的格式。 选项包括:text、json。 默认值为“text”。 (默认值为“text”)

--trusted-microsoft-suffixes(字符串)指定可以在其中发送 Microsoft Entra 登录令牌的其他域后缀。 默认值为“.core.windows.net;.core.chinacloudapi.cn;.core.cloudapi.de;.core.usgovcloudapi.net;*.storage.azure.net”。 此处列出的任何内容都会添加到默认值。 为安全起见,应只在此处放置 Azure 域。 用分号分隔多个条目。

另请参阅