目標は、日付の後に作成または変更されたファイルのみを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)に実行するつもりでした。
私のコマンドを修正できますか?それとももっと良い解決策がありますか?
私はあなたが何をしようとしているのか少し混乱しています。 Rsyncは、それ自体で、新規/変更されたファイルのみを転送します。したがって、週に1回ハードドライブでデータを転送する場合、rsyncを定期的に実行すると、find
を使用して提案しているソリューションよりも帯域幅が少なくなります(おそらくそれより少なくなります)。
find
でのこのすべての作業は、すでに存在する機能を複製しているように見えます。
find
を本当に使用したい場合は、xargs
やxargs
のような機能は必要ありません。これを行うだけです:
find ... -print | rsync ... --files-from=-
どこ ...
は、「適切と思われるその他のオプション」です。これにより、rsyncはstdinからファイルのリストを読み取ります。
+
は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
を使用することで、それをシミュレートできるはずです。