特定のユーザーからのファイルのみをrsyncする

特定のユーザーからのファイルのみをrsyncする

特定のユーザーのファイルのみを rsync する方法はありますか? 複数のユーザーのファイルを含むフォルダーがありますが、特定のユーザーのファイルのみをバックアップしたいです。

rsync のマニュアルページを見ましたが、そのようなフラグはないようです。

何か案は?

答え1

いいえ、rsync コマンドラインから特定のユーザーのファイルを直接選択する方法はありません。

しかし、これらのファイルのリストを生成するのは非常に簡単です。例えば、次のようなコマンドを使用します。

   find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'

findは、/src/ ディレクトリの下のツリーにあるすべてのファイルを検索し、所有者を含む長いリストを出力します。次に、これらのリストを に渡します。 は、awkあなた ("your_name") に属するファイルを選択し、それらのファイルのみに対してフルパスを出力します。 で始まる奇妙な構造は、for一部のファイル名にスペースが含まれる可能性があるためです。そのため、この構造は、i.e.9 列目以降のすべてのトークン ( 、すべてのスペースで区切られた文字シーケンス) を出力します (ファイル名には任意の数のスペースが含まれる可能性があります)。また、この構造により、これが 1 行に収まるようになります。

この出力をファイルにリダイレクトし、このファイルにリストされているファイルに対してのみ rsync を使用することができます。

答え2

MariusMatutiae の回答は私には役に立ちませんでした。大量の-rw-r--r--行しか表示されませんでした。

そこで私は次のような答えを導き出しました:

  1. コマンドfindにはオプション-user(および-group)があり、これははるかに使いやすくなっています。相対パス/ファイル名が必要です:
    a)findオプション:-printf '%P\n'、または
    b)パイプスルーsed -e "s#/path##"
  2. rsync は、ファイルから同期する可能性を提供します: 。このファイルはローカルにある必要があります。したがって、rsync でファイルをプッシュするか、プルするサーバーが、リストが以前に生成されたリモート側から最初にファイルを取得する必要があります。--files-from=FILE

=> 私の例では、これは機能します:
1a) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.list、または
1b)find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

2)rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik

-nまず/でテストする必要があります--dry-run

関連情報