如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:
标准方法:
# cp -a /source/directory /dest/directory # 要求 GNU cp
# (cd /source/directory && tar cf - . ) | \
(cd /dest/directory && tar xvfp - )
如果包含硬链接,则需要更严谨的方法:
# cd /path/to/old/directory
# find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
如果是远程操作:
# (cd /source/directory && tar cf - . ) | \
ssh user@host.dom (cd /dest/directory && tar xvfp - )
如果没有链接文件:
# scp -pr user1@host1.dom:/source/directory \
user2@host2.dom:/dest/directory
其中,scp <==> rcp,ssh <==> rsh。
下面的有关拷贝整个子目录的信息由 Manoj Srivastava srivasta@debian.org 发表于 debian-user@lists.debian.org。
8.3.2 cp
传统上,cp 并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬链接。另一件需要注意的事就是稀疏文件(有洞的文件)。
GNU cp 克服了这缺陷,然而对于非 GNU 系统,cp 仍存在问题。而且使用 cp 无法生成小巧轻便的文档包。
% cp -a . newdir
8.3.3 tar
Tar 克服了 cp 在处理符号链接时出现的问题,然而,cpio 可以处理特殊文件,传统的 tar 却不行。
对于某个有多重硬链接的文件,tar 的处理方法是只将其中一个链接拷贝到磁带上,所以日后你只能找回拷贝中所保留那个的链接所指的文件;cpio 会为每个链接做一个拷贝,日后你可以找回任意一个链接所指的文件。
在 Potato 和 Woody 中,操作 .bz2 文件的 tar 命令参数有所变化,所以请在脚本中使用 --bzip2 而不要简写为 -I(Potato)或 -j(Woody)。
8.3.4 pax
全新的,符合 POSIX(IEEE Std 1003.2-1992, pages 380–388 (section 4.48) and pages 936–940 (section E.4.48))标准的,众望所归的,轻便的文档包交互工具。pax可以读、写以及列出文档包的成员,并能拷贝文件目录层次。pax 的操作独立于特定的文档包格式,支持各种各样不同的文档包格式。
pax工具刚刚成形,还很新。
# apt-get install pax
$ pax -rw -p e . newdir
or
$ find . -depth | pax -rw -p e newdir
8.3.5 cpio
cpio 从 cpio 或 tar 文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或管道。
$ find . -depth -print0 | cpio --null --sparse -pvd new-dir
8.3.6 afio
afio 更善于处理 cpio 格式的文档包。通常它比 cpio 要快,且提供了更多磁带选项,并且能更友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用 afio 制作压缩文档包比压缩 tar 或 cpio 文档包更安全。在备份处理脚本中 afio 是更佳的“文档处理引擎”。
$ find . -depth -print0 | afio -px -0a new-dir
对所有的磁带备份我都使用 afio。
