Skip to content

Instantly share code, notes, and snippets.

@p1-ra
Created July 8, 2022 21:22
Show Gist options
  • Save p1-ra/2378f92a16c36fdc7ea10bab7ea34e57 to your computer and use it in GitHub Desktop.
Save p1-ra/2378f92a16c36fdc7ea10bab7ea34e57 to your computer and use it in GitHub Desktop.
ESXi clone VM
# Simple script to run on ESXi host to clone a VM
# VM must first be shutdown
# SOURCE/DEST dir must be absolute paths
# RENAME_VM_NAME_REGXP is a sed arg
#
# ./clone_vm.sh /vmfs/volumes/store1/vm_source /vmfs/volumes/store1/vm_dest s/vm_source/vm_dest/g
#
# Next to have clone a VM, find the vmx file from ESXi storage explorer,
# right click on it
# and select "Register VM"
SOURCE_DIR=${1}
DEST_DIR=${2}
RENAME_VM_NAME_REGXP=${3}
echo "[+] Creating new VM directory << ${DEST_DIR}"
mkdir -p "${DEST_DIR}"
echo "[+] Copying original vmdk and vmx"
cd ${SOURCE_DIR}
for i in *.vmdk; do
cp $i "${DEST_DIR}/$i";
done
for i in *.vmx; do
cp $i "${DEST_DIR}/$i";
done
echo "[+] Renaming copied VM << ${RENAME_VM_NAME_REGXP}"
cd ${DEST_DIR}
find . -iname *.vmx -exec sed -i ${RENAME_VM_NAME_REGXP} {} +;
for i in *.vmdk; do
if ! echo $i | grep "flat"; then
sed -i ${RENAME_VM_NAME_REGXP} $i;
fi
done
for i in *; do
mv "$i" "`echo $i | sed "${RENAME_VM_NAME_REGXP}"`";
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment