Bash
獲取 LXD 快照名稱數組
當談到我時,我很綠色
grep
,有人可以指出當我做一個時如何在bash
快照名稱列表中獲取一個數組(**注意:**只是名稱)lxc info mycontainer
?我目前的結果是:
root@hosting:~/LXC-Commander# lxc info mycontainer --verbose Name: mycontainer Remote: unix:/var/lib/lxd/unix.socket Architecture: x86_64 Created: 2017/05/01 21:27 UTC Status: Running Type: persistent Profiles: mine Pid: 23304 Ips: eth0: inet 10.58.122.150 vethDRS01G eth0: inet6 fd9b:16e1:3513:f396:216:3eff:feb1:c997 vethDRS01G eth0: inet6 fe80::216:3eff:feb1:c997 vethDRS01G lo: inet 127.0.0.1 lo: inet6 ::1 Resources: Processes: 1324 Memory usage: Memory (current): 306.63MB Memory (peak): 541.42MB Network usage: eth0: Bytes received: 289.16kB Bytes sent: 881.73kB Packets received: 692 Packets sent: 651 lo: Bytes received: 1.51MB Bytes sent: 1.51MB Packets received: 740 Packets sent: 740 Snapshots: 2017-04-29-mycontainer (taken at 2017/04/29 21:54 UTC) (stateless) 2017-04-30-mycontainer (taken at 2017/04/30 21:54 UTC) (stateless) 2017-05-01-mycontainer (taken at 2017/05/01 21:54 UTC) (stateless)
我的最終目標是簡單地包含一個數組,例如:
2017-04-29-mycontainer 2017-04-30-mycontainer 2017-05-01-mycontainer
您將
lxc list --format=json
獲得一個 JSON 文件,其中包含有關所有各種可用容器的大量資訊。
lxc list mycontainer --format=json
將此限制為名稱以字元串開頭的容器mycontainer
('mycontainer$'
用於完全匹配)。解析 JSON 通常比解析幾乎是自由格式的文本文件更安全。
要使用
jq
以下方法提取快照的名稱:$ lxc list mycontainer --format=json | jq -r '.[].snapshots[].name'
這會給你一個像
2017-04-29-mycontainer 2017-04-30-mycontainer 2017-05-01-mycontainer
要將其放入數組中
bash
:snaps=( $( lxc list mycontainer --format=json | jq -r '.[].snapshots[].name' ) )
請注意,如果您這樣做,帶有 shell (
*?[
) 特殊字元的快照名稱將導致文件名 globbing 發生。set -f
您可以在命令之前(和set +f
之後)防止這種情況。如果您只想遍歷快照:
lxc list mycontainer --format=json | jq -r '.[].snapshots[].name' | while read snap; do # do something with "$snap" done