Rsync(タイムスタンプをコピーする必要はありません)

Rsync(タイムスタンプをコピーする必要はありません)

コマンドを使用してrsync変更されたファイル/フォルダをターゲットフォルダにコピー/同期したいと思います。コマンドを実行するたびに、Rsyncなどの問題が発生し、rsyncコマンドもタイムスタンプとともにコピーされます。

たとえば、私のターゲットフォルダ「Linux」は1か月前に更新され、私のソースフォルダには「Linux」フォルダの更新情報がありませんが、コマンドを実行すると、私のターゲットrsync「Linux」フォルダのタイムスタンプが次に更新されました。最新のソースフォルダのタイムスタンプ。タイムスタンプをコピーしたくありません。これについて私に提案してください、そして私が使ってからコマンドを見てください。

rsync -avh /source/Linux/ /destination/Linux/ 

rsync -uan /source/Linux/ /destination/Linux/

rsync -uav /source/Linux/ /destination/Linux/

答え1

オプション-a--archive)は-tオプション(--times、「修正時間を維持する」)を意味します。

--no-tこのオプションを使用または選択解除できます。--no-times 後ろに -a:

rsync -a --no-t /source/Linux/ /destination/Linux/

ソースタイムスタンプをターゲットにコピーしません。ただし、rsyncタイムスタンプ(およびその他のメタデータ)を比較して、ファイルが更新されたかコピーする必要があるかを確認します。したがって、-u--update)も使用できます。

答え2

一般的に言えば、あなたはしなければならないrsync今後はより効率的に実行されますので、タイムスタンプをコピーしてください。

ただし、時にはタイムスタンプを同期したくない場合があります。たとえば、gitファイルのタイムスタンプは絶えず変更されますが、rsyncを実行したときに送信されたタイムスタンプを表示したくなく、実際に変更されたファイルのみを表示したい場合があります。

--no-timesタイムスタンプのコピーを防ぐが、ファイルはい更新後のターゲットファイルの修正時間は、次のように設定されます。。つまり、タイムスタンプが変わるので、次のタイムスタンプをrsync更新する必要があると考えて再送信されます。

これを防ぐために--ignore-times 役に立たない、すべてのファイルが更新されるためです。

あなたができることは--checksumrsyncを使うことです。これは難しい作業ですが、必要な作業を実行します。タイムスタンプを無視し、実際にそのような場合にのみファイルを更新します。コンテンツ変更されました。

したがって、次のコマンドを使用できます。

rsync -i -a --no-times --checksum /source/Linux/ /destination/Linux

代替方法

rsyncを効率的に維持するには、タイムスタンプを同期状態に保つ必要があります。

しかし、アップデートを見たくない場合ただタイムスタンプが変更されたら、出力からそれを非表示にすることができます。

rsync -ai /source/Linux/ /destination/Linux |
grep --line-buffered -v '^.[fd]\.\.t\.\.\.\.\.\. '

このアプローチを使用すると!grep以外の終了コードが表示されます。rsyncしたがって、終了コードが誤解を招く可能性があるため、スクリプトに適していない可能性があります。以下を使用してこの問題を解決できます。パイプの故障またはパイプの状態

最後に私はこれを使用しました。

rsync_ai_with_quiet_timestamps() {
  # This will not send timestamps, and not check timestamps, but it is slow
  #rsync -a --no-times --checksum -i "$@"

  # This will send timestamps, but hide updates which are only timestamp changes
  (
    set +e
    rsync -ai "$@" |
    grep --line-buffered -v '^.[fd][.][.]t[.][.][.][.][.][.] '
    exit "${PIPESTATUS[0]}"
  )
}

...

rsync_ai_with_quiet_timestamps /source/Linux/ /destination/Linux

関連情報