次のスクリプトがあります
#!/bin/bash
#Purpose = Backup
#Created on 15-10-2015
#START
#cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local
TIME=`date +"%d%b%y_%H%M%S"`
MKDIRNAME=`date +"%d%b%y"`
FOBACKUP=$(date +'%d%b%y' -d 'last month')
DESDIR="/usr/local/backup/"
FILENAME1="filebin_$TIME.tar.gz"
FILENAME2="openvpn_$TIME.tar.gz"
FILENAME3="script_$TIME.tar.gz"
SRCDIR1="/usr/local/bin/"
SRCDIR2="/etc/openvpn/"
SRCDIR3="/var/script/"
mkdir -m 0755 $DESDIR$MKDIRNAME
tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1
tar -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2
tar -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3
cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local
cp -b /etc/crontab $DESDIR$MKDIRNAME/crontab
if [ -d "$DESDIR$FOBACKUP" ]; then
echo "file $FOBACKUP exist and was deleted!"
rm -rf $DESDIR$FOBACKUP
fi
#END
ただし、cronでこのスクリプトを実行した後、毎日次のメッセージでメールを受け取ります。
tar: Removing leading `/' from member names
この警告を受けないようにこのスクリプトを変更するにはどうすればよいですか?
ベストアンサー1
tar
セキュリティ上の理由から、この警告が表示され、先行スラッシュが削除されます。ルート権限がなくても絶対パスを含むアーカイブを抽出すると、現在のファイルを古いファイルで上書きする意図しない結果が生じる可能性があります。
次の手順を実行すると、不要な出力を削除し、tar
警告の問題を解決し、重要なエラーメッセージを引き続き表示できます。変数はアーカイブの内容を正しく反映するため、スクリプトの一貫性がさらに向上します。
ソースディレクトリ名から先行する "/"文字をすべて削除します。。
SRCDIR1="usr/local/bin/" SRCDIR2="etc/openvpn/" SRCDIR3="var/script/"
-C /
オプションの使用tar
tar
アーカイブのディレクトリ変更を行う前に/
。このオプションが利用できない場合は、コマンドを/
実行するtar
前にディレクトリを変更する必要があります。tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2 tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3