暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

rsync 按列表进行同步

生有可恋 2022-08-24
1867

rsync 中有一个参数--files-from可以按照文件列表中的内容进行同步,即按目录列表进行同步。


首先要准备一个目录列表,比如:

    $ cat filelist.txt
    /etc/ufw
    /var/www
    /opt

    如果需要同步以上三个目录,正常情况需要对每个目录执行rsync。当使用 --files-from 参数时,可以批量对多个目录执行同步。


    同步命令为:

      $ rsync -rvh --files-from=filelist.txt / tgt


      其中文件列表filelist.txt中的目录使用的是绝对目录,此时需要以根目录为起点。


      最终同步后的目录结构为:

        $ tree -L 2 tgt
        tgt
        ├── etc
        │   └── ufw
        ├── opt
        │   ├── data
        │   └── src
        └── var
        └── www


        如果不想保留完整目录,只想使用最后一级目录中的中的内容,加以增加一个参数 --no-relative

          $ rsync -rvh --no-relative --files-from=filelist.txt  tgt

          最终目录会去掉源目录中的父目录,只保留最终目录中的内容。效果有点像把多个目录中的内容合并到一个目录中。


          文件列表也可以使用相对路径,但要求以源目录为起点,比如:

            $ cat /root/src/filelist.txt
            etc/ufw
            var/www
            opt

            当执行rsync时,文件内容中的目录不是绝对路径,绝对路径应该是:

              /root/src/etc/ufw
              /root/src/var/www
              /root/src/opt

              执行rsync,类似先执行cd切换到源目录,再从文件列表中读取目录进行同步 :

                $ rsync -rvh --files-from=filelist.txt root/src/ tgt

                如果可以,最好还是使用绝对路径,因为文件列表不支持使用../ 来切换路径。所有需要同步的目录在同一个目录下还好,如果跨目录使用相对路径就不支持了。


                这个--files-from参数改变了 rsync 的默认行为,所以在比对文件时它会重复同步。为避免每次执行都重复拷贝,需要加一个 --size-only 参数,即只比对大小。


                这里的目录端使用了本地目录,如果需要将文件传输到远程主机,换成远程目录即可,比如:

                  $ rsync -rvh --files-from=filelist.txt /  root@192.168.1.1:/tgt

                  全文完。


                  如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。



                  文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论