web-dev-qa-db-ja.com

一部のサブディレクトリを省略したディレクトリから.tar.gzを作成し、新しいファイルまたは変更されたファイルのみを追加します

スクリプトを作成する必要があります。おそらく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)

最初のバックアップには常にすべてのコンテンツが含まれますが、残りのバックアップには変更されたファイルと最新のファイルのみが含まれ、他には何も含まれません。

2
Reynier

現在の日付をファイル名に挿入するには、 コマンド置換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`
0
pferate