首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure-CLI Blob存储移除多个气泡

Azure-CLI Blob存储移除多个气泡
EN

Stack Overflow用户
提问于 2017-07-31 20:25:23
回答 3查看 2.4K关注 0票数 0

我需要删除多个文件/波包与Azure-CLI。但没有得到官方的支持。因此,我编写了一个for-循环来使用az命令删除多个文件。看起来是这样的:

代码语言:javascript
复制
for i in `az storage blob list --container-name $BUCKET --output table | awk '{print $1}'| sed '1,2d' | sed '/^$/d'` ; do
    if az storage blob delete --name $i --container-name $BUCKET --output table ; then
      echo "Files inside the bucket (container) ${BUCKET} have been erased"
    else
      echo "Unable to erase the files inside the bucket (container) ${BUCKET}." && exit 1
    fi
done

但这不正确,我认为循环挂起。但我不知道为什么。

我希望任何人都能帮我。提前谢谢。

编辑:

谢谢你的帮助。但什么都没发生。我正在研究Xubuntu 17.04,并安装了新的天蓝色的cli。

我收到这条消息,如果我CTRL+C:

代码语言:javascript
复制
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/applicationinsights/channel/SenderBase.py", line 118, in send
  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.5/urllib/request.py", line 466, in open

    response = self._open(req, data)
  File "/usr/lib/python3.5/urllib/request.py", line 484, in _open
    '_open', req)
  File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.5/urllib/request.py", line 1297, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/usr/lib/python3.5/urllib/request.py", line 1254, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/usr/lib/python3.5/http/client.py", line 1107, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
    self.send(msg)
  File "/usr/lib/python3.5/http/client.py", line 877, in send
    self.connect()
  File "/usr/lib/python3.5/http/client.py", line 1253, in connect
    super().connect()
  File "/usr/lib/python3.5/http/client.py", line 849, in connect
(self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.5/socket.py", line 703, in create_connection
    sock.connect(sa)
KeyboardInterrupt

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/azure/cli/core/telemetry.py", line 271, in <module>
  File "/usr/lib/python3/dist-packages/azure/cli/core/telemetry.py", line 263, in upload_telemetry
  File "/usr/lib/python3/dist-packages/applicationinsights/TelemetryClient.py", line 55, in flush
  File "/usr/lib/python3/dist-packages/applicationinsights/channel/TelemetryChannel.py", line 71, in flush
  File "/usr/lib/python3/dist-packages/applicationinsights/channel/SynchronousQueue.py", line 39, in flush
  File "/usr/lib/python3/dist-packages/applicationinsights/channel/SenderBase.py", line 118, in send
  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.5/urllib/request.py", line 466, in open
    response = self._open(req, data)
  File "/usr/lib/python3.5/urllib/request.py", line 484, in _open
    '_open', req)
  File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.5/urllib/request.py", line 1297, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/usr/lib/python3.5/urllib/request.py", line 1254, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/usr/lib/python3.5/http/client.py", line 1107, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
    self.send(msg)
  File "/usr/lib/python3.5/http/client.py", line 877, in send
    self.connect()
  File "/usr/lib/python3.5/http/client.py", line 1253, in connect
    super().connect()
  File "/usr/lib/python3.5/http/client.py", line 849, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.5/socket.py", line 703, in create_connection
    sock.connect(sa)
KeyboardInterrupt

我运行这个脚本是完全没有必要的。我总是犯同样的错误:-

-阿鲁卡

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-01 02:22:10

在我的测试中,你的脚本对我有用,也许我们可以试试这个脚本:

代码语言:javascript
复制
export AZURE_STORAGE_ACCOUNT=jasontest321
export AZURE_STORAGE_ACCESS_KEY=+v6/ZQy74QhIwdvEMbnMV7HMaDaNUAkCDizBTOVdZkBUlw==
export container_name=vhds
for i in `az storage blob list --container-name $container_name --output table | awk '{print $1}'| sed '1,2d' | sed '/^$/d'` ; do
    if az storage blob delete --name $i --container-name $container_name >/dev/null ; then
      echo "Files $i inside the $container_name have been erased"
    else
      echo "Unable to erase the files $i inside the  $container_name." && exit 1
    fi
done

下面是关于结果的截图:

更新:

代码语言:javascript
复制
#az --version
.
role (2.0.5)
sf (1.0.2)
sql (2.0.4)
storage (2.0.7)
vm (2.0.7)

Python (Linux) 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

Python location '/root/lib/azure-cli/bin/python'
[root@jasoncli@jasonye ~]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

在我的实验室里,我的根帐户版本是2.7.5。我们应该为您的用户aruka检查您的python版本。

Update2:

我们可以使用Azure门户云壳来测试这个脚本:

Update3:

代码语言:javascript
复制
root@jasonvm:~# history
    1  echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" |      sudo tee /etc/apt/sources.list.d/azure-cli.list
    2  sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 417A0893
    3  sudo apt-get install apt-transport-https
    4  sudo apt-get update && sudo apt-get install azure-cli
    5  export AZURE_STORAGE_ACCOUNT=jasondisk321
    6  export AZURE_STORAGE_ACCESS_KEY=O1/xxxWRzOlWep78iRcxxx/htgxHImKxxytlsv7gnn0hg1aGvw==
    7  export container_name=vhds
    8  for i in `az storage blob list --container-name $container_name --output table | awk '{print $1}'| sed '1,2d' | sed '/^$/d'` ; do     if az storage blob delete --name $i --container-name $container_name >/dev/null ; then       echo "Files $i inside the $container_name have been erased";     else       echo "Unable to erase the files $i inside the  $container_name." && exit 1;     fi; done
    9  az login -u jason.ye@xxxx.onmicrosoft.com -p xxxx
   10  export AZURE_STORAGE_ACCOUNT=jasondisk321
   11  export AZURE_STORAGE_ACCESS_KEY=O1/2D1UxeGcOlWep78iRcR5PxxgxxxzRbWoytlsv7gnn0hg1aGvw==
   12  export container_name=vhds
   13  for i in `az storage blob list --container-name $container_name --output table | awk '{print $1}'| sed '1,2d' | sed '/^$/d'` ; do     if az storage blob delete --name $i --container-name $container_name >/dev/null ; then       echo "Files $i inside the $container_name have been erased";     else       echo "Unable to erase the files $i inside the  $container_name." && exit 1;     fi; done
   14  export AZURE_STORAGE_ACCOUNT=jasondisk321
   15  export AZURE_STORAGE_ACCESS_KEY=O1/2D1UC0xxx/ztABmMyQFCeGcWRzOlWep78iRcR5Pt/K9yKxMT/htgxHImKqgznzRbWoytlsv7gnn0hg1aGvw==
   16  export container_name=vhds
   17  for i in `az storage blob list --container-name $container_name --output table | awk '{print $1}'| sed '1,2d' | sed '/^$/d'` ; do     if az storage blob delete --name $i --container-name $container_name >/dev/null ; then       echo "Files $i inside the $container_name have been erased";     else       echo "Unable to erase the files $i inside the  $container_name." && exit 1;     fi; done
   18  history

票数 1
EN

Stack Overflow用户

发布于 2017-09-27 18:30:24

有几个提示(与问题的根源无关,这就是为什么删除命令挂起)--您不必使用sed/awk舞蹈来获得blob名称。有一种特定的输出格式(tsv),它的目的是为您提供一个更加脚本友好的输出(没有标题或其他分散注意力的东西可以排除)。然后,结合--查询,您可以选择您感兴趣的输出的哪些字段:

代码语言:javascript
复制
az storage blob list -c templates --account-name johanstetemplates --query "[].name" --output tsv

将给出给定容器中的blobs列表。

就我个人而言,如果我想并行地处理许多项,并控制我发出的并发请求等事情,我就倾向于使用xargs。

代码语言:javascript
复制
    az storage blob list -c templates --account-name johanstetemplates --query "[].name" --output tsv | xargs -L1 -P10 -I{} az storage blob show -c templates --account-name johanstetemplates -n {}

(我更改了delete命令以显示,以防止用户盲目复制/粘贴命令,并在删除所有blobs时感到非常不安)

票数 1
EN

Stack Overflow用户

发布于 2017-08-03 13:27:56

第一个命令(在我自己的天色上):

代码语言:javascript
复制
$ az storage blob list --container-name testbucket --output table
Name         Blob Type      Length  Content Type    Last Modified
-----------  -----------  --------  --------------  -------------------------
results.csv  BlockBlob         254  text/csv        2017-08-02T22:30:05+00:00

其版本如下:

代码语言:javascript
复制
$ az --version
azure-cli (2.0.12)

acr (2.0.9)
acs (2.0.11)
appservice (0.1.11)
batch (3.0.3)
billing (0.1.3)
cdn (0.0.6)
cloud (2.0.7)
cognitiveservices (0.1.6)
command-modules-nspkg (2.0.1)
component (2.0.6)
configure (2.0.10)
consumption (0.1.3)
container (0.1.7)
core (2.0.12)
cosmosdb (0.1.11)
dla (0.0.10)
dls (0.0.11)
feedback (2.0.6)
find (0.2.6)
interactive (0.3.7)
iot (0.1.10)
keyvault (2.0.8)
lab (0.0.9)
monitor (0.0.8)
network (2.0.11)
nspkg (3.0.1)
profile (2.0.9)
rdbms (0.0.5)
redis (0.2.7)
resource (2.0.11)
role (2.0.9)
sf (1.0.5)
sql (2.0.8)
storage (2.0.11)
vm (2.0.11)

Python (Linux) 2.7.13 (default, Jan 19 2017, 14:48:08) 
[GCC 6.3.0 20170118]

Python location '/home/aruka/lib/azure-cli/bin/python'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45424688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档