このコードでは、excludespec
変数はすべてのサブ文字列と一致することが期待されていますが、変数を使用して正確な表現をtarコマンドに渡すのではなく、実行時に一致する実際のファイルを評価しているように見えます。
excludespec=${PWD##*/}\_$USER\_`hostname`.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