我在服务器上有一些站点,我只想备份它们的网络根目录,为每个站点创建一个新的存储库。使用 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/webroot
用borg create command
中的v
替换了.