shell:管道 | 、xargs 和 exec

  • 命令行参数:getopt()函数用于解析命令行参数
  • 标准输入:scanf()/gets()等函数用于获取标准输入
  • 管道 |

将前一个命令的输出做为标准输入传给后面的命令,不会用到任何中间文件与缓冲区。函数

  • xargs

将前一个命令的输出做为命令行参数传给后面的命令。命令行

> 批量建立文件
pi@raspberrypi:~/test $ touch {1..9}.txt
pi@raspberrypi:~/test $ ls
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
> 修改
pi@raspberrypi:~/test $ ls *.txt | xargs -n1 -i{} mv {} {}_bak
pi@raspberrypi:~/test $ ls
1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  5.txt_bak  6.txt_bak  7.txt_bak  8.txt_bak  9.txt_bak
  • exec

find命令中-exec参数将查询结果经过命令行参数传递给后面的命令。code

-exec与xargs不一样的是:-exec是将结果逐条传递给后面的命令,后面的命令逐条执行。xargs是将结果做为一个列表所有传递给后面的命令,后面的命令一次性执行参数串,能够经过xargs -p ls -l来查看即将要执行的完整的命令。排序

pi@raspberrypi:~/test $ find . -name "*txt*" |xargs -p ls -l rm    
ls -l rm ./4.txt ./9.txt ./2.txt ./1.txt ./6.txt ./7.txt ./8.txt ./3.txt ./5.txt ?...

目前已知的只能读取命令行参数的命令有:ls、rm。get

经过分析-exec与xargs的不一样,就会发现若是在find中使用-exec+ls -lrt的方式,列表并无进行排序,若想要排序,可以使用xargs+ls -lrt,不过要注意-exec与xargs区别test

相关文章
相关标签/搜索