当前位置: 首页 > 工具软件 > Unison > 使用案例 >

linux unison数据同步,unison命令_Linux unison 命令用法详解:Unison 是一个文件同步工具,采用 rsync 类似的算法,但是提高了一步,双向同步以及一个统一的版本控...

商瀚
2023-12-01

unison 命令

前言3.2.1. unison 命令行

3.2.2. 常用参数

3.2.3. 模式匹配

3.2.4. 应用举例

3.2.5. unison 配置文件

Unison 是一个文件同步工具,采用 rsync 类似的算法,但是提高了一步,双向同步以及一个统一的版本控制系统。

3.2.1. unison 命令行可以用如下格式调用 unison

unison profile_name [options]

读取 ~/.unison 目录下的配置文件 "profile_name.prf"。

注意到命令行没有指出要进行文件同步的两个地址,实际上应该在配置文件 中有相关的 root 指令进行了设置。如:

# Roots of the synchronization root = /home/bcpierce root = ssh://saul//home/bcpierce # Paths to synchronize path = current path = common path = .netscape/bookmarks.html

unison profile root1 root2 [options]

root1, root2 分别是要执行同步的两个路径。这时 "profile.prf" 配置文件中,应该不包含 root 设置;

root1, root2 路径的格式可以是本地目录,也可以是远程服务器的路径,例如: ssh://username@remotehost//home/jiangxin/work

unison root1 root2 [options]

相当于 unison default root1 root2。即读取 "default.prf" 的配置。

3.2.2. 常用参数-testserver

测试连通性,连接到服务器即退出。示例:

$ unison / ssh://opensou1@bluehost/ -servercmd=~/bin/unison -testserver

如果服务器端 unison 可执行文件不在默认目录下,甚至没有 unison 命令(需要你编译一个上传到服务器),则需要使用 -servercmd 参数告诉要执行的服务器 unison 命令位置。

使用 -testserver 参数,则成功链接即退出,也不会去执行目录的比较等后续操作。

-servercmd xxx

告诉 unison, 服务器端的 unison 命令是什么。参见上面的示例。

-auto

接受缺省的动作,然后等待用户确认是否执行。

-batch

batch mode, 全自动模式,接受缺省动作,并执行。

-ignore xxx

增加 xxx 到忽略列表中

-ignorecase [true|false|default]

是否忽略文件名大小写

-follow xxx

是否支持对符号连接指向内容的同步;

例如在我的 ~/.unison 的配置文件 default.prf 中有

# Unison preferences file follow = Path {unison_*} ignore = Path {WWWROOT/wiki_mirror} ignore = Name {,.}*{.~$lock} ignore = Name {a.out}

我将预进行同步的系统文件在 xxx/src 下分别作符号链接,如 unison_httpd.conf 指向 c:/program files/apache/.../httpd.conf。 同步时,"follow = Path {unison_*}" 配置(或参数)将跟踪符号链接指向的实际文件。 如果没有该设置,符号链接不予同步。

-immutable xxx

不变目录,扫描时即忽略

-silent

安静模式

-times

同步修改时间

-path xxx 参数

只同步 -path 参数指定的子目录以及文件,而非整个目录。例如

unison /home/username ssh://remotehost//home/username \ -path shared \ -path pub \ -path .netscape/bookmarks.html

3.2.3. 模式匹配如下参数 ignore/ignorenot, follow, sortfirst/sortlast, backup, merge 定义各自的匹配模式。 例如: ignore = pattern

pattern 的语法格式

Regex regexp

即常规表达式。

Name name

路径的最后一部分与 “name" 匹配。可以使用通配符,见下面描述。

Path path

全路径与 "path" 匹配。可以使用通配符,见下面描述。

以下通配符可以用在 Path 和 Name 中:

?

匹配除了 "/" 之外,任意单个字符;

*

匹配除了 "/" 之外的任意字符;如果用在 "Name" 中,则不和以 "."开始的文件匹配,而用在 "Path" 中,可以和 "." 开始的向匹配。

[xyz]

匹配 {x,y,z} 中任一字符;

{a,bb,ccc}

匹配 a, bb, ccc 中任何一个;

示例:

忽略 CVS 目录以及以 .cmo 结尾的文件:

ignore = Name {CVS,*.cmo}

忽略路径 a/b:

ignore = Path a/b

忽略路径 */tmp。当 * 用在 Path 中,可以和以 "." 开始的文件、目录名匹配,如下面的和 ".foo/tmp" 匹配;

ignore = Path */tmp

忽略 a/b/ 开始,结尾是 .ml 的文件。

ignore = Regex a/b/.*\.ml

3.2.4. 应用举例本地目录间的镜像

unison

获取远程 unison 版本

ssh remotehostname unison -version

测试

unison -testServer 本地目录 ssh://user@remotehostname/远程目录

执行数据同步

unison ssh://remotehostname/

远程目录是绝对目录,不是用户主目录

注意 在主机和目录间又多加了一个 "/":

unison ssh://remotehostname//

参数 -path 指定同步的子目录。以下只同步 /home/username 下的 shared 目录。

unison /home/username ssh://remotehost//home/username -path shared

-path 可以多次出现

unison /home/username ssh://remotehost//home/username \ -path shared \ -path pub \ -path .netscape/bookmarks.html

3.2.5. unison 配置文件3.2.5.1. .unison 目录

~/.unison 目录保存用户配置文件以及 Archive 文件。

配置文件扩展名为 .prf,缺省的配置文件为: "default.prf"。

Archive 文件可能有多个,每对同步的对象对应一个文件。这个文件记录了文件的状态,可以在后续的更新动作中更快速的判断文件的更新动作。 Archive 文件名和双方的主机名、路径名等相关。

Archive 虽然自动由 unison 维护,但是特殊情况下(如本机的地址经常变更),可以利用下面的方法:

环境变量 "UNISONLOCALHOSTNAME" 可以用于本机地址经常变化的环境,unison 会采用该环境变量的值;

可以在缺省的配置文件中,用 rootalias 命令将新的主机、路径名称对应为老的主机名和路径名, 然后再确定出 archive 名称。这样就不会造成由于主机名修改,导致 unison 更新状态的丢失, 进而导致上次更新状态的丢失。

rootalias = //new-hostname//new-path -> //old-hostname//old-path

3.2.5.2. *.prf 配置文件

如果 unison 只带一个参数执行,如

unison

则在 ~/.unison 目录下查找 ".prf" 配置文件。

如果不带参数执行 unison,则查找 "default.prf" 文件。

3.2.5.3. .prf 文件示例

简单的 default.prf 示例

# Roots of the synchronization root = /home/bcpierce root = ssh://saul//home/bcpierce # Paths to synchronize path = current path = common path = .netscape/bookmarks.html

更复杂的配置文件:

# Roots of the synchronization root = /home/bcpierce root = ssh://saul//home/bcpierce # Paths to synchronize path = current path = common path = .netscape/bookmarks.html # Some regexps specifying names and paths to ignore ignore = Name temp.* ignore = Name *~ ignore = Name .*~ ignore = Path */pilot/backup/Archive_* ignore = Name *.o ignore = Name *.tmp # Window height height = 37 # Keep a backup copy of the entire replica backup = Name * # Use this command for displaying diffs diff = diff -y -W 79 --suppress-common-lines # Log actions to the terminal log = true

使用 include 包含文件

"unison workingset" 参照 "workingset.prf" 执行:

path = current/papers path = Mail/inbox path = Mail/drafts include common

"common" 文件内容:

在 common 包含文件中,没有出现 PATH,毕竟要在包含文件中包含各个配置文件的交集么。

# Roots of the synchronization root = /home/bcpierce root = ssh://saul//home/bcpierce # (... other preferences ...) # If any new preferences are added by Unison (e.g. ’ignore’ # preferences added via the graphical UI), then store them in the # file ’common’ rathen than in the top-level preference file addprefsto = common # regexps specifying names and paths to ignore ignore = Name temp.* ignore = Name *~ ignore = Name .*~ ignore = Path */pilot/backup/Archive_* ignore = Name *.o ignore = Name *.tmp

 类似资料: