仅 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/directory 下树中的所有文件,并打印出包含所有者的长列表,然后将这些列表传递给awk,后者选择属于您的文件(“your_name”),然后仅针对这些文件打印出完整路径。以 开头的奇怪构造for是由于某些文件名可能包含空格,因此此构造打印i.e.从第 9 列开始的所有标记( ,所有空格分隔的字符序列)(文件名可能包含任意数量的空格)。此外,此构造确保此内容保持在一行上。

您可以将此输出重定向到文件,然后仅对此文件中列出的文件使用 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

相关内容