私はずっと前にバックアップスクリプトを書いていました。tar マニュアルのこの部分:
複数の「--exclude」オプションを提供できます。
--exclude-from=file
-X file
tarがfileにリストされているパターンと一致するファイルを無視するようにします。
私のtarコマンドは次のとおりです。
includesFile=include.txt
excludesFile=exclude.txt
tar zcpf - . -T ${includesFile} -X ${excludesFile} | openssl des3 -salt | dd of=out.bak
これはinclude.txt
:
/etc/
/var/
/usr/
/data/
/opt/
/root
これはexclude.txt
/data/webapp/webapp-data/*
/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*
以前はうまくいきました。最近、私はアーカイブのサイズが著しく増加したことを知り、verboseに切り替えると巨大なディレクトリがtar
含まれていることがわかります。webapp-data
何らかの理由でこれ以上除外されません。
最後にやったことはアップグレードでした。Debian の提示到着Debian ストレッチ。バージョン変更が非常に少ないので、これが理由かどうかはわかりません。
/data/webapp/webapp-data/*
変更してみましたが役に立ち/data/webapp/webapp-data/**
ませんでした。
除外リストが機能しなくなったのはなぜですか?
答え1
Debian JessieからStretchにアップグレードした後、tar除外と同じ問題が発生し、コマンドライン引数の順序を次から変更して問題を解決しました。私のbackup_exclude.txtは次のようになります
tar cvzpf backup.tar.gz /DirToBackup1 /DirToBackup2 --exclude-from=/path/to/backup_exclude.txt
。
tar cvzpf backup.tar.gz --exclude-from=/path/to/backup_exclude.txt /DirToBackup1 /DirToBackup2
/var/log/* /cache/* /.cache/*
(ページの最後を参照 https://www.gnu.org/software/tar/manual/html_section/tar_49.html)
答え2
(ついに)問題を発見して解決できました。ワイルドカードとして提供された項目を含む複数の項目の組み合わせですexcludes
(質問する前にこれを行っていませんでした...今は機能しません)。これは有効なコマンドです。
includesFile=include.txt
excludesFile=exclude.txt
tar -zcpf - --absolute-names -X ${excludesFile} -T ${includesFile} | openssl des3 -salt | dd of=out.bak
もちろん、例外は次の形式で提供されます。
/var/cache/*
/var/lib/dpkg/*
/usr/bin/*
/usr/share/locale/*
/proc/*
/sys/*
以下が含まれます:
/etc/
/var/
/usr/