我想使用parallel来实现一个目录下的一些文件,
现在我有一些任务,
1、我想跳过一些文件,例如parallel -j 16 'zcat {} > {.}.unpacked' ::: *.gz
但是对于这个,我想在操作这个命令时排除一些具有某些模式的文件。我该如何实现呢?
2、当某些作业在操作文件时出错退出时,如何跳过此状态继续操作其他文件?
您对要排除的内容有点模糊,但是说您想处理所有gzip文件,除了以字母a
开头的文件:
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%当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%的作业完成时退出。杀死正在运行的作业。
如果您不想使用find
,您可以使用skip()
:
parallel -j 16 'zcat {= /mypattern/ and skip() =} > {.}.unpacked' ::: *.gz
/mypattern/
可以是任何Perl代码。