GNU parallel
GNU parallel是用于Linux和其他类Unix操作系统的命令行驱动的实用工具,它允许用户并行的执行shell脚本。GNU parallel是Ole Tange用Perl写的自由软件。它可在GPLv3条款下获得[3]。GNU parallel可以在远程服务器上运行作业,它使用ssh与远程机器进行通信。
|  | |
| 開發者 | GNU计划 | 
|---|---|
| 当前版本 | |
| 源代码库 | |
| 编程语言 | Perl | 
| 操作系统 | Linux和其他类Unix操作系统 | 
| 类型 | 实用工具 | 
| 许可协议 | GPLv3 | 
| 网站 | www  | 
用法
    
最常用的用法是替代shell循环,比如将
    for x in $(cat list); do 
        do_something "$x"
    done | process_output
变为如下形式:
    cat list | parallel do_something | process_output
这里的文件list包含给do_something的实际参数,而这里的| process_output可以省略。
使用parallel的脚本通常比使用pexec的脚本易读。
程序parallel的特征还有:
- 聚组标准输出和标准错误输出,parallel延期输出直到所有运行作业完成;
- 可保持输出的次序同于输入的次序;
- 恰当的处理包含特殊字符的文件名,比如空格、单引号、双引号、&(ampersand)和UTF-8编码字符;
作为缺省,parallel并行运行作业的数量同于CPU核心数目。
例子
    
 find . -name "*.foo" | parallel grep bar
上述命令是如下命令的并行等价:
 find . -name "*.foo" -exec grep bar {} +
它在当前目录及其子目录中的名字结束于.foo的所有文件中查找字符串bar的出现。parallel将如期运行除非遇到名字包含换行的文件。为了避免这个限制可以使用:
 find . -name "*.foo" -print0 | parallel -0 grep bar
上述命令使用空字符来分隔文件名。
 find . -name "*.foo" | parallel -X mv {} /tmp/trash
上述命令使用{}来告知parallel将{}替代为实际参数列表。
 find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media
上述命令所做同于:
 cp -v -p *.ogg /home/media
但是,使用find/parallel/cp的前者命令更加有效利用资源,并且在*.ogg展开后对于shell而言太大的情况下不作为错误而停止。
参见
    
|  | 维基共享资源中相关的多媒体资源:GNU parallel | 
引用
    
- . 2024年1月24日 [2024年1月25日] (英語).
- . 2024年3月31日 [2024年4月3日] (英語).
- . GNU.org. [2021-02-06]. (原始内容存档于2021-02-01).
外部链接
    
    
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.