对于性能测试,我需要制作数千个单个文件的副本。使用bash脚本比cp
循环中的for
有更快的方法吗?我知道存在用于创建数千个文件(rsync等)的一个副本的工具,但是有没有一个工具可以利用源文件总是相同的事实来加速这个过程?
答案 0 :(得分:3)
以@Chepner的想法为基础......
这需要6.3秒(每次8个)来制作10,000份副本:
0x1
这需要19秒(一次一个):
parallel -N 8 'cat source.txt | tee copy{1}.txt copy{2}.txt copy{3}.txt copy{4}.txt copy{5}.txt copy{6}.txt copy{7}.txt copy{8}.txt ' ::: {1..10000}
这需要5秒钟(每次10个):
for i in {1..10000}; do cp source.txt copy${i}.txt; done
请注意,我在SSD上运行,旋转磁盘的结果可能会更糟。
答案 1 :(得分:1)
您可以尝试tee
。例如,
cat source.txt | tee copy1.txt copy2.txt copy3.txt > copy4.txt
它可能没有比运行cp
的多个副本快得多,但是进程启动开销略微减少。 (此处,运行tee
一次而不是cp
4次。)
答案 2 :(得分:0)
我认为所有基于标准coreutils(cp,tee等)的方法都会 - 或多或少 - 具有相同的性能。它们还有几十种您真正不需要的选项,每种选项都使用系统资源。
如果您需要非常快的东西,可以自己编写pcopy
代码。它不是很复杂,您可以使用copy.c(由cp和其他std coreutils程序使用)作为起点。
我会使用以下方法:
我认为以这种方式编码的pcopy
可能比std coreutils快得多。
答案 3 :(得分:0)
将文件a复制到b1 .. b1000
wsclient.getClientes().toList();