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.pdf
或 myfolder/%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 个命令实现此目的。
我需要将文件从一个 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.pdf
或 myfolder/%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 个命令实现此目的。