O curingas é feito após a substituição de variáveis. Para colar o valor literal de uma substituição, mas impedir o curinga, use aspas duplas em torno da referência $var
.
Nesse código, espera-se que a variável excludespec
corresponda a toda a substring, mas parece avaliar os arquivos reais correspondentes a ela quando executada, em vez de passar sua representação exata ao comando tar usando-a.
excludespec=${PWD##*/}\_$USER\_
hostname .bkcd_backup*
O resultado final é que o arquivo que está sendo criado não corresponde à lista de exclusão, portanto, as saídas de tar:
tar: .: file changed as we read it
A string está definindo algo que eu não sei?
Aqui está o código:
#!/bin/sh
# bkcd - backup current directory in situ
DMY_M() {
date +%Y%m%d_%H%M
}
timestring=$(DMY_M)
echo 'pwd' - $timestring > .bkcdspec
filename=${PWD##*/}\_$USER\_'hostname'.bkcd_backup.$timestring.tar.gz
excludespec=${PWD##*/}\_$USER\_'hostname'.bkcd_backup*
fullexclude="$excludespec"tar.gz
echo excludespec - $excludespec
echo filename - $filename
echo fullexclude - $fullexclude
tar -cpzf $filename --exclude=$fullexclude .
rm .bkcdspec