shell脚本的迷人之处在于可以通过一系列命令的组合获取到开发人员所需要的内容,而这其中的关键在于管道和xargs
。
管道|
linux命令接受两种方式的输入,一种是命令行输入,例如ls -l /tmp
;另外一种是标准输入,例如read passwd
。很多情况下前一个命令的输出是下一个命令的输入,这个时候就可以使用管道|
来连接,比如
# 查找/tmp目录下以h结尾的文件
ls -l /tmp | grep h$
xargs
利用管道|
来连接命令的需要后一个命令支持从标准输入中获取输出,这样的命令有很多。但是也有很多命令不支持,这个时候我们就需要xargs
来将前一个命令的标准输出转化为后一个命令的命令参数,以rm
为例
# 删除当前目录下所有.svn目录
find . -name .svn | xargs rm -rf
上面指令等同于rm -rf something
,注意这里something
的位置是在最后面,当不是最后的时候可以通过-I
参数来指定位置,例如
echo "123" | xargs -I {} mv {} 456
-I {}
表示指定符号,后面的{}
表示前一个命令的输出,上面的命令等同于mv 123 456
。