如何通过VirtualBox CLI列出虚拟机并删除除指定虚拟机外的所有实例
通过VirtualBox CLI删除除指定虚拟机外的所有实例
问题
如何通过VirtualBox命令行界面(CLI)列出所有虚拟机,并删除除名为"SaveThisOne"之外的所有虚拟机?
注意:以下命令会彻底删除所有VirtualBox虚拟机,无差别执行会导致数据丢失,请勿直接运行:
VBoxManage list runningvms | awk '{print $2;}' | xargs -I vmid VBoxManage controlvm vmid poweroff VBoxManage list vms | awk '{print $2;}' | xargs -I vmid VBoxManage unregistervm --delete vmid
可行解决方案
在pmf、BeatOne和tripleee的帮助下,我实现了如下脚本,可精准保留指定虚拟机,删除其余实例:
#!/bin/bash # 脚本功能:通过vboxmanage列出所有虚拟机,关闭并删除不在保留列表中的实例 # 列出所有虚拟机并提取名称 vboxmanage list vms | awk -F '"' '{print $2}' | while read -r vmname; do # 判断当前虚拟机是否在保留列表中,是则跳过删除操作 case $vmname in "Win10" | "Ubuntu" | "SaveThisOne" ) continue;; esac # 强制关闭目标虚拟机 vboxmanage controlvm "$vmname" poweroff # 注销并彻底删除虚拟机(包含磁盘文件) vboxmanage unregistervm "$vmname" --delete done
脚本说明
- 提取虚拟机名称:
vboxmanage list vms的输出格式为"虚拟机名称" {UUID},通过awk -F '"' '{print $2}'可以精准提取出虚拟机名称 - 保留逻辑:通过
case语句定义需要保留的虚拟机名称,匹配到的实例会跳过后续删除步骤 - 删除流程:对不在保留列表的虚拟机,先执行
controlvm poweroff强制关机(若虚拟机处于运行状态),再执行unregistervm --delete完成彻底删除(该参数会同时删除虚拟机的磁盘文件等相关数据)
内容的提问来源于stack exchange,提问作者Rafael Tics
相关产品推荐
相关产品推荐

