【发布时间】:2021-10-30 19:17:42
【问题描述】:
我想用并行实现一个目录下的一些文件,
现在我有一些任务,
1,我想跳过一些文件,例如,
parallel -j 16 'zcat {} > {.}.unpacked' ::: *.gz
但为此我想在操作此命令时排除一些具有某种模式的文件。我该如何实现?
2,当操作文件的某些作业出错退出时,如何跳过此状态继续操作其他文件?
【问题讨论】:
标签: tcsh gnu-parallel
我想用并行实现一个目录下的一些文件,
现在我有一些任务,
1,我想跳过一些文件,例如,
parallel -j 16 'zcat {} > {.}.unpacked' ::: *.gz
但为此我想在操作此命令时排除一些具有某种模式的文件。我该如何实现?
2,当操作文件的某些作业出错退出时,如何跳过此状态继续操作其他文件?
【问题讨论】:
标签: tcsh gnu-parallel
您对要排除的内容有点含糊,但说您要处理除以字母 a 开头的所有 gzip 压缩文件:
find -maxdepth 1 -iname "*.gz" ! -iname "a*" -print0 | parallel -0 'zcat {} > {.}.unpacked'
关于您的第二个问题,GNU Parallel 的默认行为是在出错后继续,因此您无需明确执行任何操作。如果要更改,请查看--halt 选项:
--halt now,fail=1 当第一个作业失败时退出。杀死正在运行的作业。
--halt Soon,fail=3 3 个作业失败时退出,但等待正在运行的作业完成。
--halt Soon,fail=3% exit 当 3% 的作业失败时,等待正在运行的作业完成。
--halt now,success=1 作业成功时退出。杀死正在运行的作业。
--halt Soon,success=3 3 个作业成功时退出,但等待正在运行的作业完成。
--halt now,success=3% 在 3% 的作业成功时退出。杀死正在运行的作业。
--halt now,done=1 当其中一项作业完成时退出。杀死正在运行的作业。
--halt Soon,done=3 3 个作业完成后退出,但等待正在运行的作业完成。
--halt now,done=3% 完成 3% 的工作后退出。杀死正在运行的作业。
【讨论】:
-j 指定一个更小的值来一次尝试更少的进程,看看是否有帮助。否则就错误提出一个新问题 - 问题是免费的。祝你好运。
-u,它不会在磁盘上缓冲。
如果不想使用find,可以使用skip():
parallel -j 16 'zcat {= /mypattern/ and skip() =} > {.}.unpacked' ::: *.gz
/mypattern/ 可以是任何 Perl 代码。
【讨论】: