スクリプトを作成する必要があります。おそらくbash
、おそらく.sh
ルートディレクトリとルートのサブディレクトリでファイルの変更をチェックし、新しいファイルに追加します。 tar.gzファイル名の最後に作成日を設定する必要があります(例:monitor-17.06.2013.tar.gz
)。私はこれを作りました:
tar -zcvf /home/monitor.tar.gz /var/www/html/monitor --exclude /var/www/html/monitor/cache /var/www/html/monitor/log
動作しますが、ディレクトリ/var/www/html/monitor/log
が省略されておらず、ファイル名に日付が含まれていません。また、方法がわからないため、新しいファイルまたは変更されたファイルのみを追加する部分がありません。
編集:私のニーズを少し明確にしてくださいわかりました、ここのユーザーからのコメントのために、私は探しているものを正確に残そうとします。
Day1: 2013-06-15
Directory: /var/www/html/monitor
Backup File Created: monitor-2013-06-15.tar.gz (contains all the content of /monitor folder)
Day2: 2013-06-16
Directory: /var/www/html/monitor
Files Changed:
/var/www/html/monitor/file1.php
/var/www/html/monitor/log/file2.php
/var/www/html/monitor/web/file3.php
Files Added:
/var/www/html/monitor/index.php
Backup File Created: monitor-2013-06-16.tar.gz (contains **only** the files index.php, file1.php, file2.php and file3.php)
Day3: 2013-06-17
Directory: /var/www/html/monitor
Files Changed:
/var/www/html/monitor/index.php
Backup File Created: monitor-2013-06-17.tar.gz (contains **only** the file index.php)
最初のバックアップには常にすべてのコンテンツが含まれますが、残りのバックアップには変更されたファイルと最新のファイルのみが含まれ、他には何も含まれません。
現在の日付をファイル名に挿入するには、 コマンド置換 でdate
コマンドを呼び出します。
tar -czf monitor-$(date -d %Y-%m-%d).tar.gz …
いくつかの理由から、日付には年-月-日形式を使用することをお勧めします。辞書式順序が時系列順と一致する。米国の月日年とその他の世界の日月年の間に混乱のリスクはありません。これはISO規格です。
複数のディレクトリを除外するには、ディレクトリごとに--exclude
を繰り返す必要があります。tar -czf monitor.tar.gz --exclude dir1 dir2
と記述した場合、dir2
はアーカイブに含めるパスであり、dir1
のみがパスです。 --exclude
への引数。
tar -czf monitor-$(date -d %Y-%m-%d).tar.gz --exclude /var/www/html/monitor/cache /var/www/html/monitor/log /var/www/html/monitor
特定の日付以降に変更されたファイルを保存するには、--newer
オプションを渡します。参照ファイルまたは日付のいずれかを指定できます。タイムスタンプファイルを使用する方がはるかに信頼性が高くなります。各バックアップの前にそのファイルを作成し、前のバックアップのタイムスタンプファイルを次のバックアップの参照として使用します。
touch monitor-backup.timestamp.new
tar … --newer=./monitor-backup.timestamp
mv -f monitor-backup.timestamp.new monitor-backup.timestamp
独自の増分バックアップシステムを導入しているようです。これを確実に行うのは驚くほど困難です。 Duplicity などの既存のバックアップアプリケーションを使用することをお勧めします。
省略されたディレクトリについては、ディレクトリごとに--exclude
オプションを使用する必要がありますが、それ以降のすべてが除外されるわけではありません。一部のコマンドはコンマ区切りの値を取りますが、すべてではありません。
tar -zcvf /home/monitor.tar.gz /var/www/html/monitor --exclude /var/www/html/monitor/cache --exclude /var/www/html/monitor/log
日付の追加部分については、お探しの内容をご説明の上、ご利用いただけると思います。
-d, --diff, --compare
find differences between archive and file system
編集:これを行うための簡単なスクリプトを次に示します。エラーチェックなどはありませんが、スタートです。
NEW_FILE="monitor.`date +%d.%m.%Y`.tar.gz"
PREV_FILE={However you want to find this}
tar cf $NEW_FILE `tar --diff -f $PREV_FILE | awk --field-separator=: '{print $1}' | uniq`