ネットワーク経由でsrcからdstにファイルを同期しています。 Linuxのマニュアルページで多くのrsyncオプションを検索しているので、助けが必要です。
ターゲットのプロセスは、ソースから「新しく到着した」ファイルに応答します。たとえば、ソースファイルが2日前に変更されたがrsync
5分前に転送されなかったとします。最新のタイムスタンプに基づいて新しく到着したファイルを検出できます。
したがって、必要なタイムスタンプ操作が必要です。
- dstファイル変更タイムスタンプは、rsync転送によってエントリが最後に追加された時刻を示す必要があります。
- rsyncが新しいコンテンツを送信せずにsrcとdstを比較するとき、つまりdstがすでにsrcと一致している場合は、dstファイル変更タイムスタンプを変更しないでください。
どのrsyncオプションが望ましい動作を提供しますか?
答え1
これを効果的に実行することはできません。rsync
ネットワークを介した長い転送を短縮する主な手段としてタイムスタンプを使用してください。
このタイムスタンプ操作を本当にしたい場合は、
rsync
ターゲットファイルのタイムスタンプは、転送によってコンテンツが最後に追加された時間を示す必要があります。rsync
新しいコンテンツを転送せずにソースとターゲットを比較するときは、ターゲットファイルのタイムスタンプを変更しないでください。
その後、すべてのファイル転送の考慮事項については、最大で各ファイルの完全なチェックサムで終了します。したがって、100個のファイルを転送し、その100個のファイルがソースとターゲットの両方に存在する場合は、実行されるrsync
たびに100個のファイルがすべてチェックサムを介して変更されたことを確認します。想像できるように、これは非常に非効率的です。
rsync --archive --no-times --checksum /source/path remotehost:/destination/path
ユースケースについては説明していませんが、一般的な使い方は、rsync
ファイル修正時間を転送して送信されたように見えるファイル転送を防ぐことです。
rsync --times /source/path remotehost:/destination/path # or --archive
いつものように--archive
= -a
、--times
= -t
、--no-times
= --no-t
、--checksum
=-c
答え2
増分バックアップのユースケースを作成しているようです。
srcディレクトリ(または少なくともsrcホスト)にファイルを保持します。
$ date +%s >> backed_up.txt
ブックファイルはmtime
常に最新のバックアップが開始された時刻と一致します。find . -newer backed_up.txt -type f
タイムスタンプを比較し、転送したいファイルのリストを生成するために使用されます。rsync
リストを提供し、--archive
または他の方法を使用してそのタグをdstディレクトリに保存します。
ここで重要なのは、ターゲットファイルのタイムスタンプの保存または使用方法を変更しようとしないことです。私たちは分離モデリング作業は、隣の簿記ファイルに入れました。だからfind
/rsync
使用それ既存のファイルシステムに新しい使用法を適用するのではなく、タイムスタンプを使用します。
これは、ターゲットホストが「新しく到着した」ファイルを検出する方法です。stat()
ファイル名だけを解決するため、mtimeを繰り返し呼び出すよりも安価です。一意のファイル名はすぐに再利用/追加されないと仮定します。
#! /bin/bash
mv recent.{txt,old}
find some/dir -print | sort > recent.txt
NEW=$(comm -1 -3 recent.{old,txt})
これで、処理フェーズで必要なものにfor FILE in $NEW
最も近いファイル名を入力して繰り返すことができます。xargs