rsync:更新された/新しいファイルを別のディレクトリにコピーする

rsync:更新された/新しいファイルを別のディレクトリにコピーする

バックアップに次の構造を使用したい

/source # the source directory which should be backed up

/backup/initial/... # the first initial copy/backup of the source
/backup/snapshots/YYYYmmDDHHmmss/... # (1)
/backup/changed/YYYYmmDDHHmmss/... # (2)

私は(1)がrsyncの「デフォルト」動作だと思います。元のバックアップへのハードリンクを使用してスナップショットを作成します。私はこれをしますrsync -avuP --link-dest=$initial_backup $directory_to_backup $destination

rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/ (2) rsync 出力を取得します。 rsync -riv --existing "$directory_to_backup"/ "$last_backup"/

changedしかし、今、これら2つのスクリプトの出力をディレクトリにハードリンクしたいと思います。

私の目標は、バックアップしたいディレクトリと、新しいファイルと変更されたファイルのみをchanged含むディレクトリの完全なスナップショットを作成することです。あまりにも多くのスペースを取らないように、すべてがハードリンクされています。

答え1

私が正しく理解したら、順序を少し変更するだけです。--compare-dest新しいファイルと変更されたファイルを作成するディレクトリを使用してから、2つのパラメータを--link-dest使用してこの変更されたディレクトリと古いスナップショットに再接続できます。以下はテストスクリプトの例です。

cd /tmp/
rm -fr src backup
mkdir -p src/a/b backup
date >src/a/b/unchanged
date >src/a/b/c
rsync -a src/ backup/i
rsync -a --link-dest=../i/ src/ backup/s1
sleep 1
date >src/a/b/c
date >src/a/b/c2
rsync -av --compare-dest=../s1 src/ backup/ch
rsync -av --link-dest=../s1 --link-dest=../ch src/ backup/s2
ls -li backup/*/*/*/*

これは私に次のような結果を与えます:

919 -rw-r--r-- 2  backup/i/a/b/c
920 -rw-r--r-- 3  backup/i/a/b/unchanged
919 -rw-r--r-- 2  backup/s1/a/b/c
920 -rw-r--r-- 3  backup/s1/a/b/unchanged
472 -rw-r--r-- 2  backup/ch/a/b/c
473 -rw-r--r-- 2  backup/ch/a/b/c2
472 -rw-r--r-- 2  backup/s2/a/b/c
473 -rw-r--r-- 2  backup/s2/a/b/c2
920 -rw-r--r-- 3  backup/s2/a/b/unchanged

ここでのディレクトリは、i初期バックアップであるs1snapshot1、s2snapshot2、およびchsnapshot2 に対応する変更です。最初の列は inode 番号で、3 番目の列はハードリンクの数です。これは、変更されたファイルcがにハードリンクされch、新しいファイルc2がにハードリンクされch、変更されていないファイルがにハードリンクされていることを示しますs1i

関連情報