我有一个在Linux系统上复制的文件列表--每个文件的大小从10到100 in不等。
我只想复制到本地文件系统。是否有一种方法可以以一种简单的方式并行地执行--每个进程负责复制一个文件?
我可以很容易地编写一个多线程程序来完成这个任务,但是我想知道是否有一个低级的Linux方法来完成这个任务。
发布于 2010-06-22 10:59:41
如果您的系统没有被它破坏(例如,文件可能在缓存中),那么GNU并行http://www.gnu.org/software/parallel/可能适用于您:
find . -type f -print0 | parallel -0 -j10 cp {} destdir这将运行10个并发的cps。
赞成:阅读起来很简单。
Con: GNU并行在大多数系统上并不是标准的,所以您可能需要安装它。
如果您想保持目录结构:
find . -type f -print0 |
parallel -0 -j10 mkdir -p destdir/{//}';' cp {} destdir/{//}观看介绍视频以获得更多信息:http://www.youtube.com/watch?v=OpaiGYxkSuQ
关于并行磁盘I/O的讨论,请参见https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/。
发布于 2010-06-18 01:16:09
由于一个非常简单的原因,没有这样做的低级机制:这样做会破坏您的系统性能。与盘驱动器,每写将争夺位置的头部,导致大量的I/O等待。使用SSD,这将最终使一个或多个系统总线饱和,从而导致其他问题。
发布于 2010-06-18 02:43:30
唯一不会破坏机器响应的答案不是“副本”,而是非常快的。如果您不会在新的或旧的位置编辑这些文件,那么硬链接实际上就像一个副本,而且(只有)如果您在同一个文件系统上,它们就会很快创建。
检查一下cp -l,看看它是否对你有用。
https://serverfault.com/questions/152331
复制相似问题