linux shell命令之 xargs
1 简介
xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
2 特点
(1) 处理文件/目录名中的空格
find . -name '*~' -print0 | xargs -0 rm有一个问题,如果文件或是目录名含有空格,则可能会有些问题,这是因为xargs默认会按照空白自负来划分输入。一个简单的解决办法就是告诉find使用NUL(\0)来分割结果(通过向find提供-print0选项),并且告诉xargs也使用Nul来分隔输入(-0)。
删除备份文件,即使含有空格:find . -name '*~' -print0 | xargs -0 rm
(2)当使用-i选项使,可以用{}代替每一个参数。
使用-i选项 ,默认使用{}代替前面传送过来的参数。但是参数的长度有限制,所以可能需要使用-s选项,来扩大参数长度的大小
默认长度是4096
somecommand | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}'
使用-I选项,可以指定参数(不使用-i默认的{})
ls -l | xargs -I hahha echo hahha_123455666
total 2128_123455666
-rw-rw-r--. 1 algo algo 13420 Aug 20 14:15 all.cfg_123455666
(3)指定参数数量
如果你要执行的命令只接受1个或是2个参数,比如使用diff命令来对2个文件进行比较,那么xargs的-n选项就会非常有用,它可以指定一次向目标命令提供几个参数,如果参数数量多于你制定的数量,则命令将会被重复调用,直到所有输入都已经得到执行。注意,最后一次调用的参数有可能会少于指定的参数数量,下面让我们来看一个简单的例子:
echo {0..9} | xargs -n 2
0 1
2 3
4 5
6 7
8 9
(4)指定参数行数
同样的,你也可以使用-L参数制定每次只对某几行的输入进行操作,比如-L 1将每次从输入中取一行作为参数传递给待执行的命令,当然,你可以将1改为任意行,但1是最常用的,下面这条命令将演示如何得到每个git commit的代码变化:
git log --format="%H %P" | xargs -L 1 git diff
(5)并行
并行休眠
$ time echo {1..5} | xargs -n 1 -P 5 sleep
real 0m5.013suser 0m0.003ssys 0m0.014s
线性休眠
$ time echo {1..5} | xargs -n 1 sleep
real 0m15.022suser 0m0.004ssys 0m0.015s
如果你对使用xargs进行并行计算感兴趣,那么你或许应该看看GNU parallel,相比较而言,xargs的优势就是大多数系统默认都支持它,并且在BSD和OS X上也可以很容易的安装,但是parallel则有许多非常赞的特性。
3使用举例
本例中xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。这样要比如下使用find命令效率高的多。
find /path -type f -exec rm '{}' \;
参考自:http://heikezhi.com/yuanyi/things-you-didnt-know-about-xargs
“Things
you (probably) didn’t know about xargs”,作者:Cosmin
Stejerean
linux shell命令之 xargs的更多相关文章
- 73条日常Linux shell命令汇总,总有一条你需要!
转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...
- Linux shell命令中expr
在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作. 先说四则运算,在Shell中四则运算不能简简单单的加 ...
- Linux/shell命令的实际应用——查看Port占用 netstat
启动1024端口一下,是需要root权限的 该Linux/shell命令主要用于解决: 1.查看某端口是否被占用: 2.查看某端口被哪个进程占用: 3.查看某个进程占用了哪些端口: 比如我tomcat ...
- [Python2.x] 利用commands模块执行Linux shell命令
用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...
- java使用Runtime.exec()运行windwos dos或linux shell命令
使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试 实例代码: package com.bookoo.test.command; imp ...
- 15个有趣好玩的linux shell 命令
今天介绍一些有趣的linux shell命令,所有的命令都可以使用man + 命令名称 来查看完整的使用方法. 1,figlet 字符画 figlet 可以将英文字符串以字符画的形式输出: >& ...
- 常用Linux Shell命令,了解一下!
目录 1 前言 2 正文 2.1 关机/重启 2.2 echo 2.3 vim文本编辑器 2.3.1 最基本用法 2.3.2 常用快捷键 2.3.3 查找/替换 2.4 拷贝/删除/移动/重命名 2. ...
- Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比
Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...
- Linux SHELL 命令入门题目答案(一)
1.如何使用shell 打印 “Hello World!” (1)如果你希望打印 !,那就不要将其放入双引号中,或者你可以通过转义字符转义(2)echo 'hello world!' 使用单引号ech ...
随机推荐
- 关于C++ const
1.Const用途 No. 用途 使用范围 参考代码 1 类型检查 参数传递 void func(const int i){ ... } 2 节省空间,避免不必要的内存分配 代替#define #de ...
- vi命令的常用操作
G:移动到底部 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件, ...
- haxe 中使用音效
将wavSound.wav音效文件放到assets/sounds下, 在project.xml加入以下代码: <assets path="assets/sounds" ren ...
- bat脚本:自动压缩n天前的文件【转载】
原文如下: bat脚本:自动压缩n天前的文件-中原小伙-ChinaUnix博客http://blog.chinaunix.net/uid-24946452-id-1651762.html 磁盘 ...
- notify vs nofifyall
http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again Do you want to tell ...
- 关于SVN 提交一半卡死的问题
解决方案 1:将项目刷新一下 2:然后在到 project - clean 一下项目 3:之后提交svn 不过暂时不能确认 要等下方进度条的 svn更新状态完成 在点击确认进行提交 4:Buildin ...
- wireshark 使用技巧
Wireshark使用技巧-GeoIP显示IP地理位置 在使用Wireshark时,有的时候需要知道抓取的报文中某个IP地址的具体地理位置,笨一点的方法是将IP地址复制,然后通过一些软件或 ...
- js 中ajax请求时设置 http请求头中的x-requestd-with= ajax
今天发现 AngularJS 框架的$http服务提供的$http.get() /$http.post()的ajax请求中没有带 x-requested-with字段. 这样的话,后端的php 就无法 ...
- script 两则
script1: PATH=/usr/local/bin:/usr/bin:$PATH:. . $HOME/utility/macro/macro.env OVO_DIR=/tmp LOGFILE=$ ...
- div+css与table布局
1:速度和加载方式方面的区别 div 的加载方式是即读即加载,遇到 <div> 没有遇到 </div> 的时候一样加载 div 中的内容,读多少加载多少:table 的加载方式 ...