xargs的简单解析
来源:互联网 发布:java md5解密算法 编辑:程序博客网 时间:2024/05/18 19:18
根据《Linux与unix shell编程指南》第2章
上面第3行命令意思就是把ls得到的结果 输出给 后面的命令rm,作为rm的参数.
也就是说,上面的命令执行相当于:
==============分割线=============
对xargs解析如下:
xargs的作用是用来回避对命令行长度的限制,它通过使用一个参数多次调用一个命令实现这一功能,而不是一次使用多个参数
。这句话的意思是:xargs永远一次只传给他后面的命令一个参数,然后不停的将所有参数一一传完.
。这句话的意思是:xargs永远一次只传给他后面的命令一个参数,然后不停的将所有参数一一传完.
其实这个解析我觉得系错的,等阵再证明“
==============分割线=============
一个简单的应用如下:
bash-3.00$ ls
a.log a.txt b.log b.txt c.log c.txt
bash-3.00$ ls | xargs rm ---------(删除全部文件)
bash-3.00$ ls
bash-3.00$
可以睇出xargs的功能:它将输入 输出给xargs后面的命令,作为那个命令的参数。
也就是说,上面的命令执行相当于:
rm a.log a.txt b.log b.txt c.log c.txt
==============分割线=============
下面证明这句话是错的:
xargs永远一次只传给他后面的命令一个参数,然后不停的将所有参数一一传完
看如下例子
bash-3.00$ ls -l
total 2
-rw-r--r-- 1 o475110 u_gtsusr 0 Nov 23 11:10 a
-rw-r--r-- 1 o475110 u_gtsusr 0 Nov 23 11:11 b
drwxr-xr-x 2 o475110 u_gtsusr 512 Nov 23 11:11 c_folder (当前目录下有a b两个文件,和c_folder 这个文件夹)
bash-3.00$ ls -l c_folder/
total 0 (c_folder 文件夹是空的)
bash-3.00$ ls
a b c_folder (ls出来的输出)
bash-3.00$ ls |xargs cp (执行命令)
bash-3.00$ ls
a b c_folder (当前目录没变化)
bash-3.00$ ls c_folder/ (把a 和 b copy到了c_folder下)
a b
bash-3.00$
可以看出:
ls |xargs cp 这个命令 相当于执行了 cp a b c_folder (把 a b copy 到c_folder),而不是把 a b c_folder这3个参数一次一次地传给cp而是把ls的输出 一次过交给xargs后面的命令cp,作为cp的参数。
==============分割线=============
那么如何将参数1个1个地传给xargs 后面的命令呢
起始xargs 有1个参数-n
-n number Invokes utility using as many standard input
arguments as possible, up to number (a posi-
tive decimal integer) arguments maximum.
Fewer arguments will be used if:
o The command line length accumulated
exceeds the size specified by the -s
option (or {LINE_MAX} if there is no -s
option), or
o The last iteration has fewer than
number, but not zero, operands remain-
ing.
能指定每一次指定多少个参数给xargs后面的命令:
例子:
bash-3.00$ ls #当前目录下有a b c d 4个文件夹
a b c d
bash-3.00$ ls | xargs echo #默认不带参数的话, 管线前面的参数是一次过传给echo的
a b c d
bash-3.00$ ls | xargs -n 1 echo #这次逐个传给echo了。 所以echo 了4次, 有4行
a
b
c
d
bash-3.00$ ls | xargs -n 2 echo #每次传2个参数给echo , echo 了 2次。
a b
c d
bash-3.00$
这里介绍另1个很有用的参数i
-i[replstr] This option is equivalent to -I replstr. The
string {} is assumed for replstr if the
option-argument is omitted
意思是 xargs 加上 -i 参数后, 能用{} 代表管线前面的输出。
接上面的例子:
例如我想cp a b c d 到另1个文件夹../e
如果用ls | xargs cp -r ../e 是不行的
因为相当于执行了 cp -r ../e a b c d ... #吧 ../e a b c 这个4个文件copy 到 d
用 ls | xargs -i cp {} ../e 就ok了
因为{} 就代表了前面ls的输出, 就是a b c d 了啊~
- xargs的简单解析
- xargs的简单使用
- linux shell 之xargs 的简单使用
- LINUX命令xargs的简单应用及举例
- Xargs 的使用
- xargs的用法 [zz]
- xargs的i参数
- xargs的详细用法
- xargs的用法
- xargs的用法-wiki
- xargs 的用法
- xargs 的使用
- Linux 的xargs命令
- xargs的i参数
- xargs的用法--linux
- xargs的使用
- xargs的用法
- xargs的使用
- Ubutu 12.04 LTS 安装iNode 后缺少libjpeg.so.62与libtiff.so.3解决方法
- C/C++中产生随机数(rand,srand用法)
- 函数指针和typedef
- 校园网安装iNode for Linux认证客户端
- 一些常见的Find 命令
- xargs的简单解析
- 解决ubuntu Gvim 菜单乱码
- [转]将Ubuntu默认的邮件客户端Evolution替换为Thunderbird
- 【转】Ubuntu Vi编辑器中文乱码问题的解决
- 解决Ubuntu双击打开 txt 中文乱码(gedit)
- 【转】Linux查看文件编码格式及文件编码转换
- [转]Vi 教程(Unix行编辑器)
- 【转】vi编辑器中如何复制粘贴文本
- [转] ubuntu 无线网络 配置 virtualbox