我想 rsync 具有相同结构的特定目录和文件
例如 :-
source/
source/110/var/lib/mysql
source/110/var/lib/mysql
source/110/var/lib/mysql
source/110/home
source/110/bin/
source/110/etc/
source/120/var/lib/mysql
source/120/var/lib/mysql
source/120/var/lib/mysql
source/120/home
source/120/bin/
source/120/etc/
如何将 mysql 和主目录以及目录中包含的文件复制到相同的目标文件夹并具有相同的结构,如以下示例所示:-
destination/
destination/110/var/lib/mysql
destination/110/home
destination/120/var/lib/mysql
destination/120/home
谢谢
答案1
你可以用一些花哨的过滤器来实现这一点。手册页上有一个很好的例子,但是使用最近的 rsync (>= 2.6.7),你可以这样做:
rsync -a source/ destination/ \
-f '+ /*/' \
-f '+ /*/home/***' \
-f '+ /*/var/' \
-f '+ /*/var/lib/' \
-f '+ /*/var/lib/mysql/***' \
-f '- *'
换句话说,你列出你想要的目录包括在您的同步中,然后排除其余一切。***
通配符非常有用,但如果您的 rsync 较旧,则必须使用+ /*/home/***
以下两个过滤器替换该过滤器:
-f '+ /*/home/' \
-f '+ /*/home/**' \
答案2
以下是使用过滤器的替代方法:
cd source && \
rsync -aR 110/var/lib/mysql 110/home 120/var/lib/mysql 120/home destination
也就是说,您将所有源目录作为参数传递给rsync
,然后传递目标目录,所有这些都在一个命令中完成。在这种情况下,您必须确保使用 选项-R
,以便源目录路径保留在目标中。