如何使用GNU Parallel实现批量文件并行复制?
基于GNU Parallel的批量并行复制解决方案
该操作完全可行,GNU Parallel非常适配这类批量文件处理需求,针对小文件复制场景,4并行的配置刚好可以充分利用你的硬件资源,避免单进程复制的IO等待浪费。
基础操作步骤
- 先提前创建好目标目录,避免复制时报错:
mkdir -p /path/to/你的目标目录 - 执行并行复制命令,以下是最基础的写法:
ls /path/to/你的源目录/* | parallel -j 4 cp {} /path/to/你的目标目录/
参数说明:
-j 4就是指定同时运行4个并行复制任务,{}是GNU Parallel的内置占位符,会自动替换为每次传入的单个文件路径。
- 如果你需要保留文件的权限、修改时间、软链接属性,把
cp换成cp -a即可:ls /path/to/你的源目录/* | parallel -j 4 cp -a {} /path/to/你的目标目录/
优化与特殊场景适配
- 如果你的文件名包含空格、中文或者其他特殊字符,用
find传递文件参数更稳妥,避免路径解析错误:find /path/to/你的源目录 -maxdepth 1 -type f -print0 | parallel -0 -j 4 cp {} /path/to/你的目标目录/
其中-print0和-0参数会用null字符分隔文件名,完美兼容所有合法文件名格式。 - 需要查看复制进度的话,加上
--bar参数即可显示全局进度条:find /path/to/你的源目录 -maxdepth 1 -type f -print0 | parallel -0 -j 4 --bar cp {} /path/to/你的目标目录/ - 你可以根据实际存储介质调整并发数:如果是SSD存储可以把
-j后的数值调到68进一步提升效率,如果是机械硬盘可以降到23,避免过高的随机IO抢占拖慢整体复制速度。
注意事项
不要在源目录和目标目录同属一块机械硬盘的不同分区时把并发数开得太高,机械硬盘的随机读写性能上限很低,过高并发反而会导致整体复制速度变慢。
正式复制前可以先选少量文件测试命令逻辑是否符合预期,避免路径填写错误导致文件丢失。
内容的提问来源于stack exchange,提问作者Shawn Brar
相关产品推荐
相关产品推荐

