GNU tarでのインクリメンタルバックアップ

tarの--listed-incrementalオプション。これまで-Nを使ったり、findで新しいファイル名を探していたけど、tarの実行中はどうなるんだ、というのがあった。しょうがないので余裕を持たせて、

  1. LC_ALL=C date > timestamp.new
  2. tar cfz outXXXX.tar.gz -N "$(cat timestamp)"
  3. mv timestamp.new timestamp

のようにしていた。厳密じゃないけどなくなるよりはずいぶん良い。そう思っていたのだが、tarの--listed-incrementalというオプションはこれを厳密にやってくれるみたいだ。上記の3行は以下のように1コマンドになる。

  1. tar cfz outXXXX.tar.gz --listed-incremental out.stamp

short optionは-gです。

問題は、ディレクトリについてはやってくれないらしく、たとえ変更されていないディレクトリであってもアーカイブに入ってしまうことだ。であるからして、

  1. tar tfz outXXXX.tar.gz | grep -vq '/$' || rm outXXXX.tar.gz

みたいにディレクトリのみのアーカイブを削除することになる。これだと空ディレクトリを作ったという情報だけだと保存されなくなってしまうが。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です