特定のユーザーのファイルのみを 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--
行しか表示されませんでした。
そこで私は次のような答えを導き出しました:
- コマンド
find
にはオプション-user
(および-group
)があり、これははるかに使いやすくなっています。相対パス/ファイル名が必要です:
a)find
オプション:-printf '%P\n'
、または
b)パイプスルーsed -e "s#/path##"
- 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
。