Azcopy 从 SQL 移动或删除特定文件

Azcopy move or remove specific files from SQL

我需要将文件从一个 blob 移动到另一个 blob。不是复制。我需要搬家;这意味着当我从 A 移动到 B 时,文件从 A 移动到 B,而 A 中什么也没有。这是非常基本的,但在 Azure Blob 中是不可能的。如果可能,请告诉我。我正在使用 SQL 服务器使用 AzcopyVersion 10.3.2

因此,现在我需要将文件从 A 复制到 B,然后从 A 中删除文件。有 2 个问题。

1) 我只想将某些文件从 A 传送到 B。

DECLARE @Program varchar(200) = 'C:\azcopy.exe'
DECLARE @Source varchar(max) = '"https://myblob.blob.core.windows.net/test/myfolder/*?SAS"'
DECLARE @Destination varchar(max) = '"https://myblob.blob.core.windows.net/test/archive?SAS"'

DECLARE @Cmd varchar(5000)
SELECT @Cmd = @Program +' cp  '+ @Source +' '+ @Destination + ' --recursive'
PRINT @cmd

EXECUTE master..xp_cmdshell @Cmd 

所以当我键入 myfolder/* 时,它将获取所有文件。当我尝试 myfolder/*.pdf 时,它说 failed to parse user input due to error: cannot use wildcards in the path section of the URL except in trailing "/*". If you wish to use * in your URL, manually encode it to %2A

当我尝试 myfolder/%2A.pdfmyfolder/%2Apdf 时,它仍然给出错误。

INFO: Failed to create one or more destination container(s). Your transfers may still succeed if the container already exists.

但目标文件夹已经存在。在日志文件中它说,

RESPONSE Status: 403 This request is not authorized to perform this operation.

对于 azcopy 版本 10.3.2:

1.Copy 特定文件,例如只复制 .pdf 文件:您应该将 --include-pattern "*.pdf" 添加到您的命令中。还要记住 @Source 变量,删除通配符 *,所以你的 @Source 应该是 '"https://myblob.blob.core.windows.net/test/myfolder?SAS"'.

完成的命令如下所示(请更改它以满足您的 sql 命令):

azcopy cp "https://xx.blob.core.windows.net/test1/folder1?sas" "https://xx.blob.core.windows.net/test1/archive1?sas" --include-pattern "*.pdf" --recursive=true

2.For 删除特定的 blob,比如只删除 .pdf 文件,您还应该将 --include-pattern "*.pdf" 添加到您的 azcopy rm 命令中。

另外,azcopy中没有move命令,应该先复制=>再删除。您可以使用上述 2 个命令实现此目的。