引言
今天我们来看一下文件拷贝相关的两个指令,一个是cp,用于在服务器上,对文件或者目录进行拷贝操作。而 rsync 呢,则是一个文件增量同步的工具,一般用于远程服务器之间镜像服务。
要说两者之间功能是否有重叠呢?当然是有的,但是他们在各自的领域之内,独一无二的特性,也奠定了其坚定的系统服务基础。
cp指令
cp命令可以翻译为copy命令,并且默认情况下集成在Linux中。当你只需要对文件或文件夹执行简单的复制操作时,可以使用此命令。
基本的指令结构像下面这样:
cp source destination
我们接着操作:
cd ~
pwd
命令行输出 /home/username 目录名。那么执行一个 cp 操作
cp ./work ~/Documents
把当前目录下 work 目录所有文件,拷贝到用户家目录下的 Documents路径内。
这样写实际上是错误的,会抛出如下异常:
cp: -r not specified;
这是因为我们拷贝的是目录,而 cp 指令咋仅支持每次复制一个文件。服务信息提示已经很明确了,让我们使用 -r 选项。
-r 选项表明拷贝两个不同目录下的所有文件结构。
cp 指令拷贝有一个问题,如果目标文件存在,怎么会提示是否覆盖或创建新的备份文件.
这一般效率不是很高,且需要用户确认。下面我们说的这个 rsync 指令,则提供了强大的增量同步功能。
rsync 指令
rsync命令是一种非常快速且通用的拷贝程序,它的功能简单说如下:
创建备份
服务器间文件和目录拷贝
多的说不完……
rsync 可以被改造为更为强大的复制命令,可以在很短的时间内复制得更快、更多。
先看一个基本的用法:
rsync -anv ./work ~/bk
输出内容像下面这样:
注意到上面最后的提示信息了吗?dry run!也即是说,不是真正的执行,仅仅是演示。
要实际执行,只需去掉 -n 选项即可:
rsync -av ./work ~/bk
-a 选项表示,存档标志将保留从复制位置到目标位置的所有信息。比如用户权限,属主,属组,还有 metadata 元数据。
改进升级
rsync 这么好用,提供了超级多的可选项,让我们有了组装出来强悍工具的可能。比如说,价格进度条:
rsync -av --progress ./work ~/bk
语义化很容易理解。--progress 展示备份的进度。
别的就不都说了,会 -av 这一个选项,就够你用一阵子的了!
写在最后
通过对比可以发现,rsync 后起之秀,把前浪 cp 远远地甩在了身后。
一般来说,我更倾向于 cp 用于单台电脑内的文件和目录操作,而 rsync 则完全可以加强为系统服务,对外提供支持。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货