对于复制,您应该考虑使用cpio
在“通过”模式下(-p
):
cd /mail; find . -type f | cpio -pvdmB /home/username/mail
The -v
是为了详细;-d
根据需要创建目录;-m
保留文件的修改时间;-B
意味着使用更大的块大小,这里可能无关紧要(它曾经在弄乱磁带设备时产生影响)。此列表中省略的是-u
进行无条件复制、覆盖目标区域中预先存在的文件的标志。这cd
命令确保路径名正确;如果你刚刚这样做:
find /mail -type f | cpio -pvdmB /home/username
你会得到相同的结果,但这只是巧合 - 因为下面的子目录/home/username
与原始的绝对路径名相同。如果您需要这样做:
find /var/spool/mail -type f | cpio -pvdmB /home/username/mail
然后可以在下面找到复制的文件/home/username/mail/var/spool/mail
,这不太可能是您想要的。
您可以使用 (GNU) 实现类似的效果tar
:
(cd /mail; tar -cf - . ) | (cd /home/username/mail; tar -xf - )
这会复制目录,而不仅仅是文件。为此,您需要仅 GNU 的工具:
(cd /mail; find . -type f | tar -cf - -F - ) | (cd /home/username/mail; tar -xf - )
第一个单独的破折号意味着“写入标准输出”;第二个意思是“从标准输入读取”; “-F”选项表示“读取文件名以从指定文件中复制”。