unison命令

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 <目录1> <目录2> 获取远程 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

1条补充 在这里补充本文不完善的地方,或是在此讨论和纠错,知识在于分享,您补充的资料会让更多人获得帮助!
  • 2020年12月21日 09:31

    欢迎提新命令,我们在后台添加