电脑技术学习

如何移动UNIX目录

dn001

  这两种方法使用了相同的基本命令行结构(请参见清单 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 分发版中的标准组件,它可能更加合适。

标签: