0

我在服务器上有一些站点,我只想备份它们的 webroot,为每个站点创建一个新的存储库。使用 bash 4,我可以使用字典。

declare -A sites=(["site1"]="/var/www/webroot1"
                  ["site2"]="/var/www/webroot2"
                  ["site3"]="/var/www/webroot3"
                  )

博格命令是:

borg create  --verbose  --progress --list --stats  --show-rc  --compression lz4 $REPOSITORY::{$key}-{now:%Y-%m-%d} $value

如何创建一个在此命令中同时使用键和值的 for 循环?类似于以下内容,而是echo使用命令中的键和值并一一备份所有站点。

for i in "${!projects[@]}";
do
  echo "key  : $i"
  echo "value: ${sites[$i]}"
done

不想只是回显键和值。我想在一个命令中使用它们。

4

2 回答 2

0

我希望这是你想要的:

declare -A sites=(["site1"]="/var/www/webroot1"
                  ["site2"]="/var/www/webroot2"
                  ["site3"]="/var/www/webroot3"
                  )

for key in "${!sites[@]}"; do
    borg create --verbose --progress --list --stats --show-rc --compression lz4 "$REPOSITORY"::{"$key"}-{now:%Y-%m-%d} "${sites[$key]}"
done

它假设变量REPOSITORY也被定义为某个值。

于 2019-12-17T00:30:09.873 回答
0

我希望我已经很好地理解了你的问题。在python中,您可以编写以下代码

sites=[
    ("site1", "/var/www/webroot1"),
    ("site2", "/var/www/webroot2"),
    ("site3", "/var/www/webroot3")
]
##create a dictionary called arr{} with key: site and value:webroot
arr = {}
for k,v in sites:
    if k in arr:
        arr[k].append(v)
    else:
        arr[k] = v
print(arr)

输出将是:

{'site1': '/var/www/webroot1', 'site2': '/var/www/webroot2', 'site3': '/var/www/webroot3'}

您现在可以根据需要操作arr{}上面的字典。

要执行该命令borg create --verbose --progress --list --stats --show-rc --compression lz4 $REPOSITORY::{$key}-{now:%Y-%m-%d} $value,您需要像这样遍历字典arr{}

for k,v in arr.items():
   borg create --verbose --progress --list --stats --show-rc --compression lz4 $REPOSITORY::{k}-{now:%Y-%m-%d} v

{site}在. {k}_ /var/www/webroot_ v_borg create command

于 2019-12-16T13:10:53.937 回答