在系统之间进行目录复制的另一种方法是,使用清单 16 中所示的管道解决方案,但需要使用远程 Shell 工具作为目标。
直接通过网络进行复制
将典型的 tar 或 cpio 命令的输出通过管道传递到远程 Shell 中,如远程 Shell (rsh) 或安全 Shell (ssh),您能够直接通过网络进行复制。使用哪一种远程 Shell 技术,完全取决于您的环境中能够使用的 Shell。前者 (rsh) 是一种标准的远程 Shell 系统,他提供了基本的身份验证安全性,但不提供加密功能,而后者 (ssh) 提供了基本的身份验证和数据加密功能。
这两种方法使用了相同的基本命令行结构(请参见清单 18)。
清单 18. 直接通过网络进行复制
$ tar cf - ./*|rsh remotehost tar xf - -C /remotedir
|
除了在远程系统中执行目标 tar 命令之外,这个命令类似于本地化的 tar。因为在这两个命令之间使用了管道,所以系统能够正常工作。
请记住,根据远程 Shell 的配置,在远程电脑上进行身份验证时,您可能需要输入密码。ssh 可能也会使用相同的处理方法。清单 19 指定了用户/主机的组合。
清单 19. 指定在远程电脑上进行身份验证所使用的用户/主机的组合
$ tar cf - ./*|ssh user@remotehost tar xf - -C /remotedir
|
为了在慢速的连接上实现更好的性能,您应该使用压缩处理,如清单 20 所示。
清单 20. 在直接通过网络进行复制的过程中使用压缩处理
$ tar czf - ./*|ssh user@remotehost tar xzf - -C /remotedir
|
rsh 和 ssh 具备比较简单的命令行格式,这使得从远程系统中进行复制的过程变得更加简单。例如,rcp 和 rsh 很接近,您能够使用清单 21 中的命令。
清单 21. 使用 rcp 复制远程系统中的文档
$ rcp -r filename remotehost:/remotedir
|
您必须使用 -r 命令行选项,这样能够对目录进行递归地复制。
scp 命令很接近于 ssh,他使用了相同的结构(请参见清单 22)。
清单 22. 使用 scp
$ scp -r filename remotehost:/remotedir
|
通过网络进行同步
上面任何的解决方案都主要考虑对文档的复制,包括本地的连同通过网络的复制。然而,他们在每次进行复制操作时,都会复制整个目录结构,而这并不总是必需的。有时,您只需要复制那些在上次复制操作之后进行过更改的文档,从本质上说是进行同步,而不是完全的再次复制。
假如您使用 tar 或 cpio,那么通过显式地指定存档中需要包含的文档,您能够实现基于时间的同步。例如,假如您使用 cron 来运行同步任务,那么您能够使用下面的命令,创建仅包括在前一天进行了更改的文档的存档(请参见清单 23)。
清单 23. 创建仅包括在前一天进行了更改的文档的存档
$ tar cf archive.tar `find . -mtime -1 -type f`
|
find 命令能够查找在前一天进行了更改的文档。我仅选择了文档,因为假如包含目录,那么 tar 将包含该目录中任何的文档,这样一来,存档文档中将包含比所需要的更多的信息。
要实现更健壮的同步操作,您能够使用 rsync 工具,他是一种免费的软件实用工具,能够高效地通过网络交换文档。对于复制和同步文档,尤其是在较慢的连接中,rsync 工具可能是一种有效的方法。
总结
当您在 UNIX 中复制文档和目录树时,无论是在相同的系统中还是在通过各种类型的网络连接的不同系统之间,都能够选择使用各种各样的工具和方法。究竟使用哪一种工具,取决于实际的情况和环境。我倾向于使用 tar,因为他是我使用过的最能够兼容于各种不同 UNIX 系统的工具。对于使用 Linux® 环境的用户来说,scp 工具是大多数 Linux 分发版中的标准组件,他可能更加合适。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




