Skip to content

Instantly share code, notes, and snippets.

@davidfraser
Last active May 15, 2018 15:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidfraser/c896fe5c7863589d414ce37aeaaba99a to your computer and use it in GitHub Desktop.
Save davidfraser/c896fe5c7863589d414ce37aeaaba99a to your computer and use it in GitHub Desktop.
List VirtualBox snapshots and disk usage in a tree
#!/bin/bash
vmname="$1"
[ "$vmname" == "" ] && { echo syntax $0 vmname >&2 ; exit 1 ; }
vmdir="$HOME/virtualbox/machines/$vmname"
sndir="$vmdir/Snapshots/"
vboxtmp="`tempfile -p vbox-$vmname --suffix='-list.txt'`"
vboxsed="`tempfile -p vbox-$vmname --suffix='-list.sed'`"
vboxmanage snapshot "$vmname" list > "$vboxtmp"
for uuid in `grep "UUID:" "$vboxtmp" | sed 's%^.*(UUID: \([0-9a-f-]*\)).*$%\1%'`
do
snapshot_files=`vboxmanage snapshot "$vmname" showvminfo $uuid | grep "/Snapshots/" | sed "s#^[^:]*: .*/Snapshots/"'\([^ ]*\) (UUID:.*$#\1#'`
sn_uuid="`for sn in $snapshot_files ; do echo $sn ; done | sed 's#{\([^}]*\)}[.].*#\1#g' | sed ':a;N;$!ba;s/\n/ /g'`"
if [ "$snapshot_files" != "" ]
then
uuid_size=`cd "$sndir" ; du -chs $snapshot_files | grep total | sed 's#[ \t]*total##'`
else
uuid_size="no files"
fi
# echo "s#UUID: $uuid#$snapshot_files#g"
# echo "s#UUID: $uuid#$uuid_size#g"
echo "s#UUID: $uuid#$uuid_size ($sn_uuid)#g"
done > "$vboxsed"
cat "$vboxtmp" | sed -f "$vboxsed" | grep Name:
current_snapshot_files=`vboxmanage showvminfo "$vmname" | grep "$sndir" | sed "s#^.*$sndir"'\([^ ]*\).*$#\1#'`
for snapshot_file in $current_snapshot_files
do
uuid_size=`cd "$sndir" ; du -chs "$snapshot_file" | grep total | sed 's#[ \t]*total##'`
echo "Current snapshot $snapshot_file $uuid_size"
done
ls -hs "$sndir"/*.sav
rm "$vboxtmp" "$vboxsed"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment