如何使用同一文件列表将目录“ rsync”到多个目标目录?

时间:2019-11-21 15:10:00

标签: bash rsync

我需要某人的帮助,因为找不到有效的解决方案,无法使用 rsync 将文件从源目录复制到2个目标目录。

例如, 我的Source目录包含以下文件

[root@s001tst-mariadb ~]# ls -l /tmp/SOURCE/
total 8388592
-rw-r--r-- 1 root root 2147479552 Nov 21 16:14 TESTFILE1
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE2
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE3
-rw-r--r-- 1 root root 2147479552 Nov 21 16:16 TESTFILE4

我想将该文件复制到以下目标位置

[root@s001tst-mariadb ~]# ls -l /tmp/DEST1/ && ls -l /tmp/DEST2/
total 0
total 0

我需要的是 rsync复制到目标位置时,必须使用位于源目录(/ tmp / SOURCE /)中的相同文件列表。 rsync不能作为2个单独的命令运行,因为可以更改文件列表(例如,在第一个rsync运行时用户添加了新文件),并且在这种情况下目标目录将具有不同的文件列表。

我已经尝试过,但是由于Source中的文件仅放置在一个Destination目录中,因此无法正常工作。

[root@s001tst-mariadb ~]# rsync -a  /tmp/SOURCE/ /tmp/DEST2/ /tmp/DEST1

作为解决方案,我可以在之前手动生成文件列表,然后使用手动创建的文件列表文件运行rsync。但是我想rsync上有一些默认值可以完成此任务

  

稍后添加:找到的解决方案

使用-write-batch 选项,我得到了所需的东西

**目的地为空

[root@s001tst-mariadb ~]# ls -l /tmp/DEST1/ && ls -l /tmp/DEST2/
total 0
total 0

**将文件从源复制到任何目标

[root@s001tst-mariadb ~]# rsync --write-batch=ABC -av /tmp/SOURCE/ /tmp/DEST1/
sending incremental file list
./
TESTFILE1
TESTFILE2
TESTFILE3
TESTFILE4

sent 8,592,015,627 bytes  received 95 bytes  350,694,519.27 bytes/sec
total size is 8,589,918,208  speedup is 1.00

**文件仅在1个目录中

[root@s001tst-mariadb ~]# ls -l /tmp/DEST1/ && ls -l /tmp/DEST2/
total 8388592
-rw-r--r-- 1 root root 2147479552 Nov 21 16:14 TESTFILE1
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE2
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE3
-rw-r--r-- 1 root root 2147479552 Nov 21 16:16 TESTFILE4

**使用生成的脚本将文件复制到另一个目标位置

[root@s001tst-mariadb ~]# ./ABC.sh /tmp/DEST2/
receiving incremental file list
./
TESTFILE1
TESTFILE2
TESTFILE3
TESTFILE4

sent 95 bytes  received 8,592,015,627 bytes  381,867,365.42 bytes/sec
total size is 8,589,918,208  speedup is 1.00

**现在,两个目录中都存在相同的文件列表

[root@s001tst-mariadb ~]# ls -l /tmp/DEST1/ && ls -l /tmp/DEST2/
total 8388592
-rw-r--r-- 1 root root 2147479552 Nov 21 16:14 TESTFILE1
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE2
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE3
-rw-r--r-- 1 root root 2147479552 Nov 21 16:16 TESTFILE4
total 8388592
-rw-r--r-- 1 root root 2147479552 Nov 21 16:14 TESTFILE1
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE2
-rw-r--r-- 1 root root 2147479552 Nov 21 16:15 TESTFILE3
-rw-r--r-- 1 root root 2147479552 Nov 21 16:16 TESTFILE4

使用-write-batch 选项时,将创建一个临时文件,其大小等于所有复制文件的总和。因此,您的磁盘上必须有足够的空间。

** Generated Script
[root@s001tst-mariadb ~]# du -hs ABC.sh
4.0K    ABC.sh

** Content of the script
[root@s001tst-mariadb ~]# cat ABC.sh
rsync --read-batch=ABC -av ${1:-/tmp/DEST1/}

** Dump file
[root@s001tst-mariadb ~]# du -hs ABC
8.1G    ABC

1 个答案:

答案 0 :(得分:0)

RSync具有“批处理模式”功能,应该适合您的用途。 Chloethis服务器故障线程上有一个很好的答案。

我希望该答案中提供的示例可以很容易地适应您的确切需求。