鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號(hào)展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計(jì)算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號(hào) trap

shell 學(xué)習(xí)四十五天----xargs

執(zhí)行命令:xargs
當(dāng) find 產(chǎn)生一個(gè)文件列表時(shí),該列表提供給另一個(gè)命令有時(shí)是很有用的。

案例:

```$touch abc.c erd.c oiy.c $ll ./erd.c ./abc.c ./oiy.c $find -name '.c'| rm rm:缺少操作數(shù) 請嘗試執(zhí)行 "rm --help" 來獲取更多信息。 $find -name '.c'| xargs rm $find -name '*.c'


無任何顯示,說明已成功刪除。

1. 簡介,之所以能用到這個(gè)命令,關(guān)鍵是由于很多命令不支持管道 (|) 來傳遞參數(shù),而日常工作中有這個(gè)必要,所以就有了 xargs 命令,如上例。
xargs 可以讀入 stdin 的資料,并且以空白子元或斷行子元作為分辨,將 stdin 的資料分隔成為 atguments,因?yàn)槭且钥瞻鬃釉鳛榉指?,所以,如果有一些文件名或者其他有意義的名詞內(nèi)含空白子元的時(shí)候,xargs 就可能會(huì)出現(xiàn)誤判了。 

$touch 'file 1.log' ‘file 2.log’ $ll 總用量 0 -rw-r--r-- 1 root root 0 7 月 13 10:18 file 1.log -rw-r--r-- 1 root root 0 7 月 13 10:18 file 2.log $find -name '.log' ./file 2.log ./file 1.log $find -name '.log' | xargs rm rm:無法刪除 "./file":沒有那個(gè)文件或目錄 rm:無法刪除 "2.log":沒有那個(gè)文件或目錄 rm:無法刪除 "./file":沒有那個(gè)文件或目錄 rm:無法刪除 "1.log":沒有那個(gè)文件或目錄

    - 原因很簡單,`xargs` 默認(rèn)是以空白字符 (空格,tab,換行符) 來分割記錄的,因此文件名 `./file 1.log` 被解釋成了兩個(gè)記錄`./file` 和 `1.log`,不幸的是 `rm` 找不到這兩個(gè)文件。  
    - 為了解決此類問題,聰明的人類想出了一個(gè)辦法,讓 `find` 在打印出一個(gè)文件名之后接著輸出一個(gè) `null` 字符 (' ') 而不是換行符,然后再告訴 `xargs` 也用 `null` 字符來作為記錄的分隔符,這就是 `find` 的 `-print 和 xargs` 的 `-0` 選項(xiàng)。
`$find -name '*.log' -print0 | xargs -0 rm`

2. 主要選項(xiàng)

選項(xiàng) 含義 -0 當(dāng) stdin 含有特殊子元的時(shí)候,將其當(dāng)成一般字符 -a file 從文件中讀入作為 stdin -e flag 注意有的時(shí)候可能會(huì)是 -E,flag 必須是一個(gè)以空格分割的標(biāo)志,當(dāng) xargs 分析到含有 flag 這個(gè)標(biāo)志的時(shí)候就停止 -p 當(dāng)每次執(zhí)行一個(gè) argument 的時(shí)候咨詢問一次用戶。 -n num 后面加次數(shù),表示命令在執(zhí)行的時(shí)候一次用 arguments 的個(gè)數(shù),默認(rèn)是用所有的。 -t 便是先打印命令,然后在執(zhí)行 -i 或者是 -I,將 xargs 的每項(xiàng)名稱,一般是一行一行的賦值給 {},可以用 {} 代替 -r no-run-if-enpty 當(dāng) xargs 的輸入為空的時(shí)候則停止 xargs,不用再去執(zhí)行了 -s num 命令行的最大字符數(shù) -d delim 分隔符,默認(rèn)的 xargs 分隔符是回車,argument 的分隔符是空格,這里修改的是 xargs 的分隔符 -x exit 的意思,主要是匹配 -s 使用 -P



修改最大的進(jìn)程數(shù),默認(rèn)是 1,為 0 的時(shí)候 as mang as it can

find -print 和 -print0 的區(qū)別:

- `-print` 每一個(gè)輸出后會(huì)添加一個(gè)回車換行符,而 `-print0` 則不會(huì)。