Skip to content
On this page

rsync

远程复制

将本地的图片 拷贝到 merlin 服务器的 /root 目录下

bash
# -l:--links,拷贝符号链接
# -a:--archive,归档模式
# -h:--human-readable,可读化格式进行输出
# -z:--compress,压缩传输
# -v:--verbose,详细输出

$ rsync -lahzv /Users/merlin/Downloads/avataaars.png merlin:/root/picture.png

归档模式

最大的好处是可以拷贝元属性,如ctime/mtime/mode等等,这对于静态资源服务器非常有用。

关于元属性,可参考 stat 命令

bash
# 查看其 picture.png 信息
$ ls -lah | grep picture
-rw-r--r--  1        501 staff   37K Jul 10 15:39 picture.png

# yarn2.lock 使用 rsync 拷贝
$ rsync -lahzv /Users/merlin/Downloads/avataaars.png merlin:/root/picture.png
# yarn3.lock 使用 cp 拷贝
$ cp picture.png picture1.png

# 观察可知
# rsync 修改时间/mode 与源文件保持一致
# cp 修改时间为当前最新时间,mode 也不一致
$ ls -lah | grep picture
-rw-r--r--  1        501 staff   37K Jul 10 15:39 picture.png
-rw-r--r--@   1 merlin  staff    37K  7 10 15:39 picture.png
-rw-r--r--@   1 merlin  staff    37K  7 11 22:42 picture1.png

拷贝目录

拷贝目录,则需要看原目录是否以 / 结尾。

  • 不以 / 结尾,代表将该目录连同目录名一起进行拷贝
  • / 结尾,代表将该目录下所有内容进行拷贝
bash
# 以下以拷贝 react 目录为例

# 拷贝react整个文件夹到服务器abc下
$ rsync -lahz ~/Documents/react ~/Documents/abc/

# 以下效果相同
# 拷贝react整个文件夹到服务器Documents下并改名为adc
$ rsync -lahz ~/Documents/react ~/Documents/abc
# 拷贝react下文件到服务器abc文件夹下
$ rsync -lahz ~/Documents/react/ ~/Documents/abc
# 拷贝react下文件到服务器abc文件夹下
$ rsync -lahz ~/Documents/react/ ~/Documents/abc/

几个问题

  • 在 Node.js 或其它语言中如何实现 cp。参考 fsp.cp。(cp 实际上是通过库函数 open/write 模拟实现)
  • 为何说保留复制文件时的元属性,对静态资源服务器有益
    • 有利于进行相关缓存策略的设置,并且保留原始的编辑时间等

MIT Licensed | Copyright © 2021 - 2022