In this code, the excludespec
variable is expected to match all it substring, but it appears to evaluate the to the actual files matching it when it is executed, rather than pass its exact representation to the tar command using it.
excludespec=${PWD##*/}\_$USER\_
hostname.bkcd_backup*
The end result is the archive being created does not match the exclusion list so tar outputs:
tar: .: file changed as we read it
Is the string defining it doing something I don't know about?
Here is the code:
#!/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
/bin/sh
points to/bin/dash
(it usually does), your script isn't a bash script, it's a dash script.