
コマンドを使用して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
役に立たない、すべてのファイルが更新されるためです。
あなたができることは--checksum
rsyncを使うことです。これは難しい作業ですが、必要な作業を実行します。タイムスタンプを無視し、実際にそのような場合にのみファイルを更新します。コンテンツ変更されました。
したがって、次のコマンドを使用できます。
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