有没有办法只 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--
只得到了大量的线条。
因此我得出了这个答案:
- 该
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
。