В этом коде переменная excludespec
как ожидается, будет соответствовать всей ее подстроке, но она, по-видимому, оценивает фактические файлы, соответствующие ей при выполнении, а не передает ее точное представление команде tar, используя ее.
excludespec=${PWD##*/}\_$USER\_
имя хоста .bkcd_backup*
Конечный результат - создаваемый архив не соответствует списку исключений, поэтому вывод tar:
tar: .: file changed as we read it
Строка, определяющая это, делает что-то, о чем я не знаю?
Вот код:
#!/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