Existe um script para este anunciado em
link
Pessoalmente, tive problemas para fazê-lo funcionar no Mac OS ElCapitan. Infelizmente, o roteiro está mal documentado.
Eu tentei os seguintes passos:
#!/bin/bash
# https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1023880
VMXFILENAME=$(sed -n 's/^.*Config file: .*\/\(.\+\)$//p' vmware.log)
echo $VMXFILENAME
exit
echo -e "#1/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/ = ""/p' vmware.log >> ${VMXFILENAME}
então primeiro eu queria saber se o nome do arquivo de configuração é detectado corretamente.
Um grep mostra o que esperar
grep "Config file:" vmware.log
2017-01-25T19:35:35.533+01:00| vmx| I125: Config file: /vmware/vm.vmwarevm/vm.vmx
mas o script não recebe o nome do arquivo correto, mostra um resultado vazio.
Então eu substituí a linha para obter o nome do arquivo com
VMXFILENAME = grep "Config file: " vmware.log | cut -f3 -d"|" | cut -f3 -d ":"
que eu pessoalmente acho melhor compreensível. Primeiro, procuramos a linha que contém o "arquivo de configuração". Nessa linha, procuramos o terceiro campo separado por um sinal de tubo e, em seguida, pelo terceiro campo, separados por dois pontos. E sim, de fato, isso determina o nome do arquivo de configuração.
Agora vamos ver se isso criará um arquivo vmx correto. Primeiro, certificamos-nos de não substituir o original, para que a última linha seja modificada como:
>> ${VMXFILENAME}.new
e agora podemos descomentar esta parte para testá-la. Antes de fazermos isso, garantimos que uma cópia de backup do nosso arquivo vmx original seja criada (e somente uma vez, se precisarmos reiniciar este script ...)
echo "trying to create a new $VMXFILENAME"
today='date "+%Y-%m-%d"'
if [ -f $VMXFILENAME ]
then
if [ ! -f $VMXFILENAME.$today ]
then
echo "creating backup of $VMXFILENAME as $VMXFILENAME.$today"
mv $VMXFILENAME $VMXFILENAME.$today
else
echo "backup $VMXFILENAME.$today exists"
fi
else
echo "$VMXFILENAME not found" 1>&2
if [ !-f $VMXFILENAME.$today ]
then
exit 1
fi
fi
e o segundo sed também não funciona como esperado (suspiro ...)
Então acabei substituindo também o sed com algumas linhas do awk
#!/bin/bash
# https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1023880
VMXFILENAME='grep "Config file: " vmware.log | cut -f3 -d"|" | cut -f3 -d ":"'
echo "trying to create a new $VMXFILENAME"
today='date "+%Y-%m-%d"'
if [ -f $VMXFILENAME ]
then
if [ ! -f $VMXFILENAME.$today ]
then
echo "creating backup of $VMXFILENAME as $VMXFILENAME.$today"
mv $VMXFILENAME $VMXFILENAME.$today
else
echo "backup $VMXFILENAME.$today exists"
fi
else
echo "$VMXFILENAME not found" 1>&2
if [ !-f $VMXFILENAME.$today ]
then
exit 1
fi
fi
echo -e "#1/usr/bin/vmware" > ${VMXFILENAME}
echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
#sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/ = ""/p' vmware.log
gawk '
# use pipe sign as a field separator
BEGIN { FS="|" }
# check whether we are in the range of lines after DICT --CONFIGURATION
/DICT --- CONFIGURATION/ { inconfig=1;next }
/DICT --- [A-Z+]/ { inconfig=0;next }
/DICT/ && (inconfig==1) {
if (match($3,/.*DICT[ \t]+(.*)/,groups)) {
print groups[1]
}
}
' vmware.log >> ${VMXFILENAME}
echo "please check ${VMXFILENAME}"