我需要删除多个文件/波包与Azure-CLI。但没有得到官方的支持。因此,我编写了一个for-循环来使用az命令删除多个文件。看起来是这样的:
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:
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我运行这个脚本是完全没有必要的。我总是犯同样的错误:-
-阿鲁卡
发布于 2017-08-01 02:22:10
在我的测试中,你的脚本对我有用,也许我们可以试试这个脚本:
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下面是关于结果的截图:

更新:
#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:
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

发布于 2017-09-27 18:30:24
有几个提示(与问题的根源无关,这就是为什么删除命令挂起)--您不必使用sed/awk舞蹈来获得blob名称。有一种特定的输出格式(tsv),它的目的是为您提供一个更加脚本友好的输出(没有标题或其他分散注意力的东西可以排除)。然后,结合--查询,您可以选择您感兴趣的输出的哪些字段:
az storage blob list -c templates --account-name johanstetemplates --query "[].name" --output tsv将给出给定容器中的blobs列表。
就我个人而言,如果我想并行地处理许多项,并控制我发出的并发请求等事情,我就倾向于使用xargs。
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时感到非常不安)
发布于 2017-08-03 13:27:56
第一个命令(在我自己的天色上):
$ 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其版本如下:
$ 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'https://stackoverflow.com/questions/45424688
复制相似问题