web-dev-qa-db-ja.com

日時より後に作成または変更されたファイルのみrsync

目標は、日付の後に作成または変更されたファイルのみをrsyncする(または目的の結果をもたらす他のツールを使用する)ことです。スペース(および/またはエスケープする必要がある他の文字)を含むファイル名で動作するはずです。

OS X 10.6.5でこのコマンドを使用して成功しました:find . -newermt "2010-11-23 16:52:50" -type f -exec rsync -vuptn '{}' ../rsync_test/ ';'-newermtはOS Xよりも他のOSで動作しているとは思いません.

このコマンドの問題は、見つかったファイルごとに1回rsyncを実行することであり、それが適切な方法ではないようです。私は最後の;+で変更しようとしたので、ファイルリスト全体を待機しましたが、ブレーキがかかりました("+"\+や他の方法でエスケープしました)。

背景:ファイルを離れた場所にバックアップしようとしています。ファイルは、RAW形式やその他の形式(写真は機能します。1日あたり約30GB)の大量の写真であり、アップロード帯域幅が小さいため、ネットワークをrsyncするのに使用できない時間がかかります(ADSLが最低)。したがって、リモートの場所に多くのディスク容量を確保し、新しい外部ファイルや変更されたファイルを小さな外付けハードドライブに週に1回転送するという考え方です。その後、rsyncを使用して、新しい場所や変更されたファイルをリモートの場所に簡単に追加できます。そのために、私は週の間に外部ハードドライブ上の新しい/変更されたファイルを同期する必要があるので、私は常に1週間より古いファイルのリモートロケーションまたは新しい/変更されたファイルのための外部ハードドライブにすべてのファイルの2つのコピーを持っています最後の輸送以来。

このコマンドを前回実行したときからの日付と時刻で10分ごと(cron)に実行するつもりでした。

私のコマンドを修正できますか?それとももっと良い解決策がありますか?

6
Yanik

私はあなたが何をしようとしているのか少し混乱しています。 Rsyncは、それ自体で、新規/変更されたファイルのみを転送します。したがって、週に1回ハードドライブでデータを転送する場合、rsyncを定期的に実行すると、findを使用して提案しているソリューションよりも帯域幅が少なくなります(おそらくそれより少なくなります)。

findでのこのすべての作業は、すでに存在する機能を複製しているように見えます。

findを本当に使用したい場合は、xargsxargsのような機能は必要ありません。これを行うだけです:

find ... -print | rsync ... --files-from=-

どこ ...は、「適切と思われるその他のオプション」です。これにより、rsyncはstdinからファイルのリストを読み取ります。

7
larsks

+はGNU findでのみ機能し、OSXにはBSD findがあります。-print0およびxargs -0を使用してシミュレーションしてください。

-newermtは、十分に新しいバージョンのGNU findで機能するはずです。私のFedora 13マシン(GNU find 4.4.2)はそれを持っていますが、私のCentOS 5マシン(GNU find 4.2.27は)touchを使用して適切な時間でファイルを作成し、次に-newerを使用することで、それをシミュレートできるはずです。