rsync ログファイルから更新されていないファイルを除外または出力します。

rsync ログファイルから更新されていないファイルを除外または出力します。

rsync潜在的に転送できるファイル数が多いファイルの場合、転送された内容のみを含む「クリーン」ログがあることを意味します。

私は次stdoutの理由で一緒に働きます:

  1. ログ出力を設定する方法がわかりません(可能な場合)。
  2. 私もそれで作業したいと思います--dry-run(これは次のことをする必要があります)。これ、から)。
  3. 私は、少なくともLinux-LinuxとLinux-msys2(またはその逆)を転送するのに役立つスクリプトを書くことです。ここで、権限(-p)、所有者(-o)、およびグループ(-g)のオプションは状況を複雑にします。

私はコマンドを組み合わせた

rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg

そして

... | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]'

説明したようにここ。最初のポイントは、更新されていないすべてのアイテムと一致します。 2 番目の文字はすべての項目タイプと一致します。残りの文字は、属性(変更/変更なし)フラグの条件と一致して-v一致を再開します。これは更新されるプロジェクトと一致する可能性があり、それ以上ではありません。更新されていないがタイムスタンプが変更された項目は一致しません。

tee私はそれを次のように組み合わせました。

rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]' | tee rsync.2.log

rsyncログファイルrsync.logと「カスタム」ログファイルを生成しますrsync.2.log

うまくいくようですが、私のアプローチには3つの「弱点」があります。

  1. このアプローチが失敗する可能性がある状況があるかどうかはわかりません(「多すぎる」レポートまたはフィルタリングされたファイルを介して)。
  2. rsyncこの問題をローカルで直接処理したいと思います。より良い方法は、rsync無差別代入方法を使用するのではなく、ログファイルから出力(出力だけでなく)を取得することですgrep。たとえば、--itemize-changes標準出力の状態を持ついくつかのファイルをインポートするには、Iを使用して.f...p.....フィルタリングする必要があります(更新されず、最初の文字がドットなので)。
  3. 使用中のgrep部分的な進捗状況は表示されません。これが非常に大きな出力に大きな問題になるかどうかはわかりません。

関連:

  1. rsync ログ削除ファイルの作成方法
  2. rsyncでスキャンされたすべてのフォルダではなくコピーされたファイルのみを表示するにはどうすればよいですか?
  3. rsyncを使用してログファイルのみを送信する
  4. https://superuser.com/questions/1002074/linux-command-line-to-create-a-log-file-for-rsync
  5. https://serverfault.com/questions/401210/rsync-report-only-uploaded-files

ノート:この質問の微妙さ(回答を参照)は、投稿/リンクされた他の同様の質問とは若干異なります。これが別の質問であるべきかどうかはあいまいで主観的です。私は個人的に現在の状態を維持することが役に立つと思います。

ベストアンサー1

3つの要求があります:

  1. ログ出力を設定します。これを行うには、--itemize-changes私が投稿したリンクと@roaimaが追加した他のリンクに示されているようにうまく機能します。
  2. 仕事--dry-run。これを行うには、--itemize-changesログファイルではなく標準出力でのみ期待される出力を生成することは依然として便利です。選択の余地がないようです。
  3. さまざまなオペレーティングシステムの組み合わせ(src / trg)を使用してください。少なくともLinux-LinuxとLinux-msys2(またはその逆)。 Msys2の場合はNTFSなので、権限はext4の権限と一致できません。したがって、すでにrsync編集されているファイルは引き続き表示されるため、リストは非常に長くなります。このような場合は--perms削除する必要があります。これは、読み取り専用<->読み取り/書き込み権限の変更も複製しません。これまでのところ、すべてのケースに対して完璧な解決策はありません。それ以外は--itemize-changesこの状況でもまだ役に立ちます。

おすすめ記事