博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你见过的最牛逼的命令行程序是什么?
阅读量:6356 次
发布时间:2019-06-23

本文共 1153 字,大约阅读时间需要 3 分钟。

你见过的最牛逼的命令行程序是什么?

知乎上有同学问到如题的问题, 同学的一个得到了众多点赞,特此分享给大家:

 
  1. alias cd='rm -rf'

主页君注:显然这个答案是开个玩笑,可别真的去试啊,否则你一定会感觉到世界都错乱了呢。不过,下面才是好戏,请看:

===============我是严肃的分割线================== 

如果从生产力的角度来说,我觉得xargs是见过的最牛逼的命令行工具。 举个栗子。比如要把该文件夹下的所有jpg文件转成png格式,普通青年可以用for循环 (代码未测试)

 
  1. for fn in *.jpg; do convert "$fn" `echo $fn | sed 's/jpg$/png/'`; done

文艺青年会用xargs来写,类似 (代码未测试):

 
  1. ls *.jpg | xargs -I{} convert "{}" `echo {} | sed 's/jpg$/png/'`

好像没什么区别?

现在你的电脑有8个核,想要同时转换格式。咋整?for或者一般的shell就傻逼了,难道要用python/multiprocessing甚至开C++/OpenMP写段小程序?no no no no no(印度口音)。xargs有个逆天的参数-P:

 
  1. ls *.jpg | xargs -I{} -P 8 convert "{}" `echo {} | sed 's/jpg$/png/'`

执行的效果是,电脑会自动读前8个文件进来,转换格式。这8个进程里任何一个执行结束后,会自动读取下一个文件,保证始终有8个进程在执行,直到所有任务执行完毕。作为一个科研狗,这简直是各种并行处理的大杀器。

===============放福利的分割线================== 

如果有多台机器怎么办呢?xargs可以在多台机器上自动并行吗?

坏消息是不行,好消息是,穿个马甲就好啦。把xargs改成parallel ()即可。

 
  1. ls *.jpg | parallel -I{} -S 32/m{
    1..4} convert "{}" `echo {} | sed 's/jpg$/png/'`

这个的意思是在名字是m1, m2, m3和m4的4台机器上并行处理,每个机器跑32个进程。这样parallel就会自动监视每个机器的运行情况,谁家CPU负载低了就自动分配给它其他任务,保证吞吐量。(当然parallel还没有智能到自动传输数据的程度,但这个可以用NFS等轻松解决)

效果?

AWS上面只要1美元一小时,用我的脚本5分钟轻松搞出来128核cluster这种事我会到处乱说?!

原文发布时间:2015-04-06

本文来自云栖合作伙伴“linux中国”

转载地址:http://uizma.baihongyu.com/

你可能感兴趣的文章
第26天,Django之include本质
查看>>
Java中静态变量和实例变量的区别
查看>>
秋名山老司机(详解)——bugku
查看>>
RED | Robot Framework集成开发环境
查看>>
育碧同 Mozilla 联手开发 AI 代码助手
查看>>
【实用】面对枯燥的源码,如何才能看得下去?
查看>>
智库说 | 徐远:数字时代的城市潜力
查看>>
《JSP极简教程》jsp c:forEach用法
查看>>
WebSocket详解(六):刨根问底WebSocket与Socket的关系
查看>>
用 Go 写一个轻量级的 ssh 批量操作工具
查看>>
网站设计之合理架构CSS 架构CSS
查看>>
OTP 22.0 RC3 发布,Erlang 编写的应用服务器
查看>>
D语言/DLang 2.085.1 发布,修复性迭代
查看>>
感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?...
查看>>
Java 基础 之 算数运算符
查看>>
Windows下配置安装Git(二)
查看>>
一个最简单的基于Android SearchView的搜索框
查看>>
铁路开通WiFi“钱景”不明
查看>>
Facebook申请专利 或让好友及陌生人相互拼车
查看>>
电力“十三五”规划:地面光伏与分布式的分水岭
查看>>