整个目录的高效复制

时间:2010-04-05 03:12:44

标签: c linux unix

我想将一个目录及其下的两个文件复制到共享存储的另一个共享位置。是否可以将三个(一个目录和两个文件)组合为连续文件并在另一侧进行分解以节省成本?我只限于c语言和Unix / Linux。我正在考虑使用inode信息创建一个结构并在接收器处获取数据。

谢谢!

3 个答案:

答案 0 :(得分:5)

rsync正是您要找的。或者tar,如果你想在另一边使用shell。

答案 1 :(得分:0)

您可以做的最佳优化是为副本使用大缓冲区。如果这还不够,那么将数据重组为单个文件而不是目录中的两个文件。下一步是加快硬件速度。

Unix / Linux中常用的文件系统很多,您需要为每个文件系统编写自定义复制算法。即使是单个文件也很少能保证连续的块,更不用说两个了。您的块复制例程绕过并且效率低于现有文件系统优化的可能性也很大。

在写入之前将整个文件读入内存将在最小化搜索时间方面提供比打开更少文件更多的好处,至少对于超过一定大小的文件而言。并非所有硬件都受到寻道时间的影响。

答案 2 :(得分:0)

出于某种原因,cpio通常比tar更受欢迎。

例如,您可以将cpio管道传输到远程运行cpio的ssh会话。