获取 LXD 快照名称数组

获取 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

答案1

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 特有的字符 ( *?[) 将导致发生文件名通配。您可以在set -f命令之前(和set +f之后)防止这种情况发生。

如果您只想循环快照:

lxc list mycontainer --format=json | jq -r '.[].snapshots[].name' |
while read snap; do
   # do something with "$snap"
done

相关内容