• 约 2 分钟

每天一个新命令 - rsync

rsync可以作为cp, mv以及scp的完美替代,并且具有一些额外的优点。

作为替代品

替代cp, mv

个人最常使用到rsync的场景就是作为cp, mv的替代品了,除了完成基本的复制粘贴等操作之外,rsync可以自由选择用户和用户组等信息,文件的几乎所有信息都能被原封不动地复制——这也是为什么timeshift等备份工具选择rsync作为同步工具的原因——基本命令格式如下:

$$ rsync 源文件... [目标文件]

如果没有指定目标文件,rsync仅会列出源文件。更常见的是带目标文件的操作,例如:

$$ rsync /usr/share/applications/obsidian.desktop ~/.local/share/applications/

但是,当需要复制文件夹及其内部所有文件时,需要添加-r选项,以指定递归地(recursively)进行复制粘贴。例如:

$$ pwd
/home/jcbl1/Documents/tmp/dir2
$$ rsync -r ../dir1 .

当需要一并复制文件元数据(如权限等)时,可以用-a参数,该参数同样具有递归功能,因此使用时无需另外指定-r参数。

在rsync中,不同于以往对Linux中“万物皆文件”的认识,当在一个目录源文件后面加上或者不加斜杠“/”时,其意义有所不同。不加斜杠时,rsync会将目标文件(目录)复制到指定目录下。在上面的例子中,dir1目录被复制到了dir2目录下。

$$ tree dir2
dir2
└── dir1
    ├── file1
    └── foo

3 directories, 1 file

想要将dir1文件中内容复制到dir2下,则需要在源文件(目录)后添加斜杠。例如:

$$ rsync -a ../dir1/ .
$$ tree ../dir2
../dir2
├── file1
└── foo

2 directories, 1 file

mv的实现只需要添加参数—remove-source-files即可,但一般情况下的的文件移动大可不必使用rsync。至此,rsync已经可以完成大部分cp, mv的功能了。

替代scp

施工中…

常用参数一览表

施工中

林威
林威 咖味十足的软件工程师