我只想将目录中选定的文件夹 rsync 到远程服务器。
这些文件夹列在 files.txt 中
user1/
user2/
rsync --dry-run -avv --include-from '/home/files.txt' /home/ -e ssh root@server:/home
这似乎有效,但它会扫描源上的每个文件/home
。这是一个小问题,因为有数百万个文件,需要几天的时间。
我尝试使用
rsync --dry-run -avv --include-from '/home/files.txt' --exclude='*' /home/ -e ssh root@server:/home
但它不起作用,因为它排除了所有内容。
答案1
我个人更喜欢使用配置文件,rsync
而不是有时很长的命令行。下面是我使用 SSH 代替您执行的操作,但使用公钥身份验证:
我的配置文件如下所示(rsync.conf
在服务器端):
uid = 0 # root uid
gid = 0 # root uid
use chroot = true
read only = true
hosts allow = a.b.c.d # Client IP address (SSH authentication lets the access to
SSH server, here is extra-protection for the rsync server)
hosts deny = 0.0.0.0 # Others IP addresses are denied
[$module]
path = /
include /etc/*** /usr/bin/tools/***
exclude /*** /usr/ /usr/bin/***
filter = - .*
命令行将是(在客户端):
rsync \
--delete \ # Delete on destination files which does not exists on source
-avz \ # -z:compress data during transfer; -a:archive; -v:verbose
-e "ssh -i ~$USER/.ssh/$PRIVATE_KEY" \
${server}::${module} ${CLIENT_SIDE_DESTINATION}
在服务器上,必须在 中添加 SSH 公钥~/.ssh/authorized_keys
。此密钥将用于tagged
仅通过 SSH 执行同步:
from="a.b.c.d",command="rsync --server --daemon --config rsync.conf ." ssh-dss ....
此配置将仅同步/etc/
和/usr/bin/tools
文件夹;filters
指令也将阻止隐藏文件同步。棘手的部分是调整include
和exclude
指令,例如仅同步目标文件夹。
答案2
您指定 /home 作为源目录,这会使速度变慢。您不能为每个用户目录分配一个作业吗?
如果这不切实际,那么您可以尝试使用标志来减少比较文件的开销--size-only
,该标志将根据文件大小传输文件,而忽略时间戳检查。当然,这可能会产生不良行为,具体取决于您的环境。
除此之外,rsync 的运行频率也可以改善这种情况。考虑使用同步 这将导致基于 inotify 事件发生同步