rsyncを使いたいのですが…
- 受信側から送信側でも削除したファイルを削除します。
- 受信側のrsyncedディレクトリにある他のファイルを削除しないでください。
たとえば、次のようなディレクトリがあるとしますlocal-src
。
今後: local-src
地域を含める...
a.txt
b.txt
c.txt
コンテンツを同期したいリモートディレクトリlocal-src
はですremote-src
。
今後: remote-src
リモコンには以下が含まれています。
a.txt
b.txt
c.txt
d.txt
README.md
一部のファイルを削除するとしますlocal-src
。
ローカル削除後: local-src
地域を含める...
c.txt
rsyncを使用して、ソースから削除されたファイルはターゲットから削除されますが、ターゲットの他のファイルは削除されないようにする方法です。たとえば、目的地で次のようにします。
ローカル削除後: remote-src
リモコンには以下が含まれています。
c.txt
d.txt
README.md
つまり、リモートでも削除されますが、別々にa.txt
保存されます。b.txt
d.txt
README.txt
rsyncを使ってこれを達成する方法はありますか?
編集する:結論は、rsyncではこれを行うことは不可能であるようです。これがなぜ必要なのか尋ねられましたが、ユースケースを説明すると次のようになります。
Webサーバーがあるとしましょう。そのWebサーバーには複数のディレクトリがあります。ディレクトリA
とpublic_html
私のウェブサイトを提供するディレクトリがあるとしましょう。ディレクトリにファイルを生成する自動化されたプロセスがあるとしますA
。生成されたファイルをrsync(または他のツールを使用して同期)したいと思います。修正するA
rsyncが誤って私のサイトをpublic_html
削除しpublic_html
たくありません。
rsyncがそのタスクに適したツールではない場合、これを行う方法を知っている人はいますか?
ベストアンサー1
やりたいことは合理的ですが、一人でやることrsync
は合理的ではありません。だから答えはいいえ。
理由は簡単です。rsync
各ディレクトリのコンテンツ履歴を維持しない場合は、削除すべきコンテンツと削除しないコンテンツを知る方法はありません。追加のサポートなしでは不可能です。
なぜこれを楽しむのか、自分に尋ねて、rsync
より明確に説明する必要があります。よりスマートなプログラムもありますlibrsync1.so
。
不要な緩い制約を使用すると、
rsync
次のことがわかります。rdiff バックアップ:
mkdir a
touch a/xx
touch a/yy
rdiff-backup a b
ls b
が表示され、配置xx
さyy
れますb
。
touch b/zz
rm a/xx
rdiff-backup a b
これが表示さxx
れ、zz
場所が指定されますb
。変更をロールバックできるようにディレクトリもrdiff-backup
保持され、コマンドを使用して定期的に消去する必要があります。 (この例では、ローカルファイルを使用してターゲットの追加データが削除されないことを示していますが、rdiffバックアップはネットワーク経由で実行することもできます。)rdiff-backup-data
b
rdiff-backup
別のオプションは、分散バージョン管理システム(mercurial、bazaar、git)を設定することです。たとえば、Mercurialを使用すると、すべての変更をサーバーにプッシュし、チェックアウトされたファイルを更新し、リモートサーバー上の他のファイル(しかしリビジョン制御の対象ではないファイル)を無視するスクリプト(私はMakefileを使用します)持つことができます。 )。
サーバーは次のことを行います。
hg init
hg add file_list_excluding_that_should_not_should_be_deleted_if_not_on_client
hg commit -m "initial setup"
クライアント側から:
hg clone ssh://username@server/dir_to_repository
クライアントからファイルを削除して次のようにします。
hg commit -m "removed file"
ssh username@server "cd dir_to_repository; hg update --clean"
削除したファイルはサーバーから削除されますが、ストレージに追加されていない他のデータは削除されません。