私は次のトピックを読んだ。
しかし、私が知っている限り(何か落ちたかもしれない)、次の問題は扱いません。
rsync
送信側、受信側に存在しないファイルのコピーおよび削除を要求する方法(例外)は何ですか? (たとえば、.hg
送信側にリポジトリがない場合でも、受信側のMercurialリポジトリを削除しないでください。)
一つの可能性は?
下記@Richard Hollowayの回答を借りてください。次のような行があるとしましょう。
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
rsync
私が理解したように、この行はトランスポートパスにないすべてのエントリを削除しますdont_delete_me
。今私の質問は、rsyncが受信側で同じままであるかどうかです。dont_delete_me
送信者が一致するものがない場合でも同じですかdont_delete_me
?
答え1
--delete
とを使用すると、--exclude
元のファイルを削除しても除外された場所の内容は削除されません。
rsync
ただし、これによりフォルダがまったく削除されない問題が発生します。したがって、そのフォルダrsync
に対して他の作業が必要ですsync
。
例えば。
rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh
これを反対方向に実行することもできますが、削除されたファイルをすべて削除してから置き換えるので、それほど効率的ではありません。
ライナーではできません。
答え2
私の目的に適した次の解決策を見つけました。
rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest
(注:-n
テスト実行を実行するオプションを追加して--delete
に変更しないでください--delete-excluded
。)
このコマンドを実行すると、次の属性が生成されます。
- ソース
src
ディレクトリは変更されず、そのまま残ります。 ターゲット
dest
フォルダは、以下を除いてソースフォルダと一致します。- リスト内のアイテムはターゲット
do_not_send_to_dest
に送信されません。 - リスト内の項目は、
do_not_modify_in_dest
ターゲットで変更されていないままです。
- リスト内のアイテムはターゲット
- (注:存在しないプロジェクトが " "ファイルにリストされていても問題はありません
do_not_
。)
説明する
rsyncがコマンドライン引数を左から右に読み取ると、引数のため--delete
にrsyncが内部的に(ある意味では)「モード切り替え」を行い、オプションを再利用できるようになるように見えますが、--exclude-from
意味は異なります。
警告する:
リスト内のアイテムが
do_not_send_to_dest
すでにターゲットにある場合は、次の操作を行います。- このコマンドはターゲットからプロジェクトを削除しません(プロジェクトがソースディレクトリから最初に削除されない限り)。
- 警告する:
--delete
に変更すると、両方のリストのいずれ--delete-excluded
かにリストされているターゲットのすべてのコンテンツが削除されます。 xD(rsyncはオープン/フレキシブルに書かれていますが、いくつかのニュアンスはありますか?)
軽い使用テスト。
「」を使用していますrsync version 3.0.9 protocol version 30
。