与 cp 相比,tar 工具提供了许多的好处。首先,也是最重要的,对于非标准的文件类型,它通常更加可靠。其次,因为它能够提供关于复制的文件的可视化反馈信息,所以使用它将文件复制到新的系统会更加方便。最后一点也非常重要,您可以使用 tar 创建文件系统的存档文件,万一在出现问题时,该文件可以作为源目录/文件系统的备份。在处于单用户模式的计算机的用户文件系统中,这种 tar 文件方法可以用来创建新的文件系统内容,而无需将新的目标装入到临时目录装入点。
使用 tar 进行文件复制的最好的方法是,通过管道将 tar 创建的文件传递到位于新的位置进行文件提取的另一个 tar。清单 6 中给出了一个这样的示例。
清单 6. 使用 tar 进行文件复制 $ cd /usr $ tar cfp - ./* |(cd /mnt/usr.tmp; tar xvfp -)
第一个 tar 中的 c 参数告诉 tar 创建一个存档。v、f 和 p 选项分别指定输出详细信息(显示正在添加或提取的文件)、对文件(而不是磁带设备)进行写入/读取、保持权限和所有权。
清单 7. 进行复制的过程 $ cd /usr $ tar cfp /tmp/usr.tar ./* $ cd /mnt/usr.tmp $ tar xvfp /tmp/usr.tar
无论使用哪一种解决方案,您将在每个文件复制到/复制出存档文件时获得相应的报告,假设您使用了 v 命令行选项(请参见清单 8)。
清单 8. 打印出复制过程 a ./4lib/ 0K a ./4lib/libX.so.1.0 symbolic link to ./libX11.so.4.3 a ./4lib/libX11.so.4.3 216K a ./4lib/libXaw.so.4.0 208K a ./4lib/libXmu.so.4.0 72K a ./4lib/libXol.so.3.1 1056K a ./4lib/libXt.so.4.1 264K a ./4lib/libce.so.0.0 48K a ./4lib/libdeskset.so.0.1 64K a ./4lib/libdga.so.1.0 40K a ./4lib/libhelp.so.1.0 24K a ./4lib/libolgx.so.3.1 56K a ./4lib/libtt.so.1.1 848K a ./4lib/libttstub.so.1.1 32K a ./4lib/libxview.so.3.73 1328K a ./4lib/libdl.so.1.0 symbolic link to ../../lib/libdl.so.1 a ./4lib/libc.so.1.9 403K a ./4lib/libc.so.2.9 402K ...