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

rsync 命令行参数

生有可恋 2022-11-28
823

rsync 是个非常复杂的命令,当需要用的时候总是需要查看具体的命令行参数说明。最佳实践应该是是结合使用场景去记忆,或者完全不用去记,把常用例子记下来并把功能备注清楚。

rsync 命令基础语法

    SYNOPSIS
    Local:
               rsync [OPTION...] 源地址... [目的地址]


    Access via remote shell:
    Pull:
    rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    Push:
    rsync [OPTION...] SRC... [USER@]HOST:DEST


    Access via rsync daemon:
    Pull:
    rsync [OPTION...] [USER@]HOST::SRC... [DEST]
    rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    Push:
    rsync [OPTION...] SRC... [USER@]HOST::DEST
    rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)


    其中源地址后面带 / 和不带  所表示的意义不同,带 表示同步目录下内容,不带/表示同步目录本身,目标目录带不带/意义一样。

    常用选项

    • --verbose, -v  打印更多细节

    • --dry-run, -n 干run  即假装执行,不真执行

    • --human-readable, -h  提高输出可读性

    • --recursive, -r  递归执行,即对子目录同步


    当只有 -rvh 时,功能类似 cp -rf ,并没有增量同步的功能,并且拷贝后的文件属性也会变掉。其中  -n 选项可以打印将要执行的动作,方便检查命令是否符合预期。-h 类似 du -sh 命令中的 -h,主要用于字节转换。

      $ rsync -rvh -n src dest

      此时的 rsync 达不到增量同步的作用,那么如样可以增量同步呢?加上一个 --size-only 即可以增量同步了。

        $ rsync -rvh -size-only -n src dest

        常用选项

        • --size-only  只匹配大小,不匹配时间

        • --archive, -a   归档模式,实际为 -rlptgoD

        • --links, -l  将软链接copy为软链接

        • --perms, -p  保留属性

        • --times, -t  保留 mtime

        • --group, -g  保留group属性

        • --owner, -o  保留owner属性

        • -D  同 --devices --specials

        • --devices  保留设备文件

        • --specials  保留 special 文件

        另一种触发同步的机制是比较  mtime,当 mtime 不同时触发更新。-a 选项我们可以理解为原样拷贝,即会把大部分属性都保留,-a 这一条选项实际上是后面那一堆选择的组合。所以正常的同步命令使用下面这条就够了:

          $ rsync -avh src dest

          如果不想保留文件属性,而是想拷贝后替换成当前用户属性。可以把 -a 拆散了用。比如下面这条就是不保留属性但还能起到同步的作用:

            $ rsync -rvh -t src dest

            基本上把 -a 选择搞懂了,剩下的什么同步场景都能搞定。同步权限用 -p , 同步 owner 属性用 -o ,同步 group 属性用 -g

              $ rsync -rvh -t src dest
              $ rsync -rvh -t -o src dest
              $ rsync -rvh -t -g src dest

              需要注意的是,rsync 同步的触发机制是 mtime 和 文件大小不一致,当这些都没有变化时,是不会触发同步的。所以当执行一次同步后,owner 和 group 属性是不会变的。权限、用户属性的改变不会改变 mtime 和文件大小。

              当 ssh 的端口不为 22 时,此时需要用到 -e 选项

                $ rsync -avh -e 'ssh -p 2234' root@server:/src dest
                $ rsync -avh -e 'ssh -p 2222 -o GSSAPIAuthentication=no -o ServerAliveInterval=60'  /pacs/  root@192.168.240.87:/pacs/pacsoldimg/

                还有一些其它选项,在某些情况可能会用到:

                • --mkpath   创建目标目录,支持多级

                • --copy-links, -L   传递软链接,即会拷贝文件而不是软链接

                • --one-file-system, -x   不跨文件系统

                • --list-only   显示文件列表,此时可以不接 dest

                • --delete  删除目标目录中多出来的文件

                最后再说一个有意思的选项  --stats 在同步结束后会给出一个统计信息,有类似如下输出:

                  $ rsync -rvh -t src dest
                  [...]
                  Number of files: 1,652 (reg: 1,388, dir: 264)
                  Number of created files: 1,652 (reg: 1,388, dir: 264)
                  Number of deleted files: 0
                  Number of regular files transferred: 1,388
                  Total file size: 6.86M bytes
                  Total transferred file size: 6.86M bytes
                  Literal data: 6.86M bytes
                  Matched data: 0 bytes
                  File list size: 0
                  File list generation time: 0.001 seconds
                  File list transfer time: 0.000 seconds
                  Total bytes sent: 7.00M
                  Total bytes received: 27.96K


                  sent 7.00M bytes received 27.96K bytes 14.05M bytes/sec
                  total size is 6.86M speedup is 0.98


                  全文完。


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

                        

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

                  评论