Получить массив имен снимков 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

0
02.05.2017, 01:13
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' ) )

Просто имейте в виду, что если вы сделаете это, имена снимков со специальными для оболочки символами (*?[) приведут к подстановке имен файлов. Вы можете предотвратить это с помощью set -f перед командой (и set +f после).

Если вы просто хотите перебрать снимки:

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

Теги

Похожие вопросы