Azcopy перемещает или удаляет определенные файлы из SQL

Мне нужно переместить файлы из одного большого двоичного объекта в другой. Не копировать. Мне нужно переехать; Это означает, что когда я перехожу из A в B, файлы переходят из A в B, а в A. ничего нет. Это так просто, но невозможно в Azure Blob. Пожалуйста, дайте мне знать, если это возможно. Я использую его из SQL Server, используя 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, он все равно выдает ошибку.

ИНФОРМАЦИЯ: не удалось создать один или несколько целевых контейнеров. Ваши переводы могут быть успешными, если контейнер уже существует.

Но папка назначения уже есть. И в файле журнала написано:

ОТВЕТ Статус: 403 Этот запрос не авторизован для выполнения этой операции.


person nick    schedule 02.12.2019    source источник
comment
Под "https://myblob.blob.core.windows.net/test/myfolder/*?SAS" вы имеете в виду файлы, имя которых заканчивается на ?SAS? или вы имеете в виду папку, которая на самом деле называется *?SAS?   -  person Larnu    schedule 02.12.2019
comment
@Larnu SAS означает подпись общего доступа. SAS просто представляет строку, которая будет подписью общего доступа.   -  person Larry Flewwelling    schedule 15.12.2020


Ответы (1)


Для версии azcopy 10.3.2:

1. Скопируйте определенные файлы, например копируйте только файлы .pdf: вы должны добавить --include-pattern "*.pdf" в свою команду. Также помните, что для переменной @Source удалите подстановочный знак *, так что ваш @Source должен быть '"https://myblob.blob.core.windows.net/test/myfolder?SAS"'.

Завершенная команда выглядит следующим образом (пожалуйста, измените ее, чтобы она соответствовала вашему sql cmd):

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. Для удаления определенных больших двоичных объектов, например для удаления только файлов .pdf, вы также должны добавить --include-pattern "*.pdf" в свою команду azcopy rm.

Кроме того, в azcopy нет команды переместить, вы должны сначала скопировать ее => затем удалить. Вы можете добиться этого с помощью двух вышеуказанных команд.

person Ivan Yang    schedule 03.12.2019
comment
Спасибо, что помогло. - person nick; 03.12.2019