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



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

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

borg 命令是:

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

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

我希望这就是你想要的:

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

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

我已经用{k}替换了{site}/var/www/webrootborg create command中的v替换了.

最新更新