変更されたファイルをどのように保存しますか?

変更されたファイルをどのように保存しますか?

2つのフォルダがあります。

ORIGINAL/
ORIGINAL_AND_MY_CHANGES/

私の友人はコピーを持っていますORIGINAL/。生成したいファイルには。MY_CHANGES.tgzのみを含める必要があります。その後、私の友人はコピーに解凍して取得できます。ORIGINAL_AND_MY_CHANGES/ORIGINAL/ORIGINAL/ORIGINAL_AND_MY_CHANGES/

どうすればいいですか?

PS試してみましたが、diffバイナリデータを保存せずにrsync --link-destアーカイブから役に立たないハードリンクを作成します。

PPS私が知っている限り、変更時間を使用してどのファイルが変更されたかを判断することはできません。

答え1

rsyncの使用

あなたがやっていることは本質的に増分バックアップです。あなたの友人(あなたのバックアップ)はすでに元のファイルを持っていて、元のファイルから変更されたファイルを含むアーカイブを作成したいと思います。

同期増分バックアップ機能があります。

cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
  • -aすべての属性(時間、所有権など)が保存されることを意味します。
  • -c日付とサイズに関係なく、ファイルの内容を比較することを意味します。
  • --compare-dest=/some/directoryこれは、このディレクトリとソースツリーの同じファイルがコピーされないことを意味します。パスはターゲットディレクトリに相対的です。

Rsync は、ファイルがなくてもすべてのディレクトリをコピーします。これらの空のディレクトリを削除するにはfind -depth CHANGES_ONLY -type d -empty -delete(またはおよび存在しfindない場合)を実行します。-delete-emptyfind -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null

その後、ディレクトリにアーカイブを作成しますCHANGES_ONLY

遊歩道

ファイルを含むディレクトリに移動します。元のファイルと同じファイルはスキップしてください。必要に応じてターゲットにディレクトリを作成します。変更されたファイルをコピーします。

cd ORIGINAL_AND_MY_CHANGES
find . \! -type d -exec sh -c '
  for x; do
    if cmp -s "$x" "../ORIGINAL/$x"; then continue; fi
    [ -d "../CHANGES_ONLY/$x" ] || mkdir -p "../CHANGES_ONLY/${%/*}"
    cp -p "$x" "../CHANGES_ONLY/$x"
  done
' {} +

答え2

注文する

rsync --only-write-batch=FILE $other_options ORIGINAL_AND_MY_CHANGES/ ORIGINAL/

必要な変更を含むバッチファイルが作成されます(何も変更しません)。

バッチファイルをダウンロードして、利用可能な他のサイトにパッチを適用できます。

rsync --read-batch=FILE ORIGINAL/

関連情報