Bash

獲取 LXD 快照名稱數組

  • May 1, 2017

當談到我時,我很綠色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

引用自:https://unix.stackexchange.com/questions/362508