admin 管理员组文章数量: 1087139
2024年4月12日发(作者:splitter文件)
linux 管道传递参数
xargs是 Unix 系统的一个很有用的命令,但是常常被忽视,
很多人不了解它的用法。本文介绍如何使用这个命令。
一、标准输入与管道命令Unix 命令都带有参数,有些命令可
以接受"标准输入"(stdin)作为参数。$ cat /etc/passwd |
grep root上面的代码使用了管道命令(|)。管道命令的作
用,是将左侧命令(cat /etc/passwd)的标准输出转换为标
准输入,提供给右侧命令(grep root)作为参数。因为grep
命令可以接受标准输入作为参数,所以上面的代码等同于下面
的代码。$ grep root /etc/passwd但是,大多数命令都不接
受标准输入作为参数,只能直接在命令行输入参数,这导致无
法用管道命令传递参数。举例来说,echo命令就不接受管道
传参。$ echo "hello world" | echo上面的代码不会有输
出。因为管道右侧的echo不接受管道传来的标准输入作为参
数。二、xargs 命令的作用xargs命令的作用,是将标准输入
转为命令行参数。$ echo "hello world" | xargs echo
hello world上面的代码将管道左侧的标准输入,转为命令行
参数hello world,传给第二个echo命令。xargs命令的格式
如下。$ xargs [-options] [mand]真正执行的命令,紧跟在
xargs后面,接受xargs传来的参数。xargs的作用在于,大
多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要
xargs将标准输入转为命令行参数。$ echo "one two three"
| xargs mkdir上面的代码等同于mkdir one two three。如
果不加xargs就会报错,提示mkdir缺少操作参数。三、
xargs 的单独使用xargs后面的命令默认是echo。$ xargs #
等同于 $ xargs echo大多数时候,xargs命令都是跟管道一
起使用的。但是,它也可以单独使用。输入xargs按下回车以
后,命令行就会等待用户输入,作为标准输入。你可以输入任
意内容,然后按下Ctrl d,表示输入结束,这时echo命令就
会把前面的输入打印出来。$ xargs hello (Ctrl + d) hello
再看一个例子。$ xargs find -name
"*.txt" ./ ./上面的例子输入xargs find
-name以后,命令行会等待用户输入所要搜索的文件。用户输
入"*.txt",表示搜索当前目录下的所有 TXT 文件,然后按下
Ctrl d,表示输入结束。这时就相当执行find -name
*.txt。
四、-d 参数与分隔符默认情况下,xargs将换行符和空格作
为分隔符,把标准输入分解成一个个命令行参数。$ echo
"one two three" | xargs mkdir上面代码中,mkdir会新建
三个子目录,因为xargs将one two three分解成三个命令行
参数,执行mkdir one two three。-d参数可以更改分隔符。
$ echo -e "atbtc" | xargs -d "t" echo a b c上面的
命令指定制表符t作为分隔符,所以atbtc就转换成了三
个命令行参数。echo命令的-e参数表示解释转义字符。五、-
p 参数,-t 参数使用xargs命令以后,由于存在转换参数过
程,有时需要确认一下到底执行的是什么命令。-p参数打印
出要执行的命令,询问用户是否要执行。$ echo 'one two
three' | xargs -p touch touch one two three ?...上面的
命令执行以后,会打印出最终要执行的命令,让用户确认。用
户输入y以后(大小写皆可),才会真正执行。-t参数则是
打印出最终要执行的命令,然后直接执行,不需要用户确认。
$ echo 'one two three' | xargs -t rm rm one two three
六、-0 参数与 find 命令由于xargs默认将空格作为分隔
符,所以不太适合处理文件名,因为文件名可能包含空格。
find命令有一个特别的参数-print0,指定输出的文件列表以
null分隔。然后,xargs命令的-0参数表示用null当作分隔
符。$ find /path -type f -print0 | xargs -0 rm上面命
令删除/path路径下的所有文件。由于分隔符是null,所以处
版权声明:本文标题:linux 管道传递参数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1712854260a609513.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论