如何使用 for 循环(或不使用)在 `borg create` 命令中使用键和值

How to use key and value in a `borg create` command using for loop(or not)

我在服务器上有一些站点,我只想备份它们的 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

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

希望我已经很好地理解了您的问题。在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

我在 borg create command.

中将 {site} 替换为 {k},将 /var/www/webroot 替换为 v

希望这就是你想要的:

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 也被定义为某个值。