具有相同结构的 Rsync 特定目录和文件

具有相同结构的 Rsync 特定目录和文件

我想 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,以便源目录路径保留在目标中。

相关内容