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

相關文章
相關標籤/搜索