一直不会用 linux 中的xargs ,管道和xargs到底有什么区别?管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别?
1. 官方解释
1) 第一种解释NewUserFF 写道:
懒蜗牛Gentoo 写道:
管道是实现“将前面的标准输出作为后面的标准输入”
xargs是实现“将标准输入作为命令的参数”
2)第二种解释
xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
顾名思义: 就是Linux 命令当输入参数过长的时候会报:“命令参数列表过长” 使用xargs就不会有这样的错误
2. 个人解释
1) linux中有些命令是接受输入的,但是有些命令不接受,比如 ls -l 并不接受,而cat是接受的(单纯输入 cat 会发现liunx等待用户输入)
管道是实现“将前面的标准输出作为后面的标准输入”,也就是说如果管道后面的命令不接受用户输入,那只使用关掉是没有任何意义的。
eg: find . -type d | ls -l 其实就相当于管道以前的内容是没有任意意义的,相当于 ls -l
加入了xargs就不一样了。就会把前面的输出当命令的参数
2) 再说xargs是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
3. 举例说明
Linux目录如下显示:
使用命令显示当前目前下文件/文件夹以及嵌套的文件/文件夹 可以使用
MacBook-Pro:xargs zhangyajun$ ls -l -R
total 16
drwxr-xr-x 6 staff 204 11 17 14:34 a
drwxr-xr-x 4 staff 136 11 17 14:19 b
-rw-r--r-- 1 staff 11 11 17 14:17 d.txt
-rw-r--r-- 1 staff 12 11 17 14:17 e.txt
./a:
total 8
drwxr-xr-x 3 staff 102 11 17 14:34 a
-rw-r--r-- 1 staff 0 11 17 14:18 a.txt
drwxr-xr-x 2 staff 68 11 17 14:34 b
-rw-r--r-- 1 staff 13 11 17 14:18 b.txt
./a/a:
total 0
-rw-r--r-- 1 staff 0 11 17 14:34 a.txt
./a/b:
./b:
total 8
-rw-r--r-- 1 staff 0 11 17 14:19 a.txt
-rw-r--r-- 1 staff 13 11 17 14:19 b.txt
用别的方式可以吗?
第一步: 显示当前目录下的文件夹
MacBook-Pro:xargs$ find . -type d
.
./a
./a/a
./a/b
./b
第二步: 显示第一步中每一个文件夹中的文件/文件夹
这里如果光使用管道的话结果显示如下:
MacBook-Pro:xargs zhangyajun$ find . -type d | ls -l
total 16
drwxr-xr-x 6 staff 204 11 17 14:34 a
drwxr-xr-x 4 staff 136 11 17 14:19 b
-rw-r--r-- 1 staff 11 11 17 14:17 d.txt
-rw-r--r-- 1 staff 12 11 17 14:17 e.txt
明显并没有将 find . -type d 的结果作为ls -l 的参数
下面使用 xargs和管道结合
MacBook-Pro:xargs zhangyajun$ find . -type d |xargs ls -l
.:
total 16
drwxr-xr-x 6 staff 204 11 17 14:34 a
drwxr-xr-x 4 staff 136 11 17 14:19 b
-rw-r--r-- 1 staff 11 11 17 14:17 d.txt
-rw-r--r-- 1 staff 12 11 17 14:17 e.txt
./a:
total 8
drwxr-xr-x 3 staff 102 11 17 14:34 a
-rw-r--r-- 1 staff 0 11 17 14:18 a.txt
drwxr-xr-x 2 staff 68 11 17 14:34 b
-rw-r--r-- 1 staff 13 11 17 14:18 b.txt
./a/a:
total 0
-rw-r--r-- 1 staff 0 11 17 14:34 a.txt
./a/b:
./b:
total 8
-rw-r--r-- 1 zhangyajun staff 0 11 17 14:19 a.txt
-rw-r--r-- 1 zhangyajun staff 13 11 17 14:19 b.txt
4. 补充
xargs还有别的用法,本文只简单的介绍一下,后续会陆续增加 xargs 的用法
参考:
http://blog.sina.com.cn/s/blog_8317516b010103fx.html 这篇文章写的很好,很详细,推荐给大家哦
http://blog.csdn.net/yongan1006/article/details/8134581#comments