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

shell 學習四十五天----xargs

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

案例:

```$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. 簡介,之所以能用到這個命令,關鍵是由于很多命令不支持管道 (|) 來傳遞參數(shù),而日常工作中有這個必要,所以就有了 xargs 命令,如上例。
xargs 可以讀入 stdin 的資料,并且以空白子元或斷行子元作為分辨,將 stdin 的資料分隔成為 atguments,因為是以空白子元作為分隔,所以,如果有一些文件名或者其他有意義的名詞內(nèi)含空白子元的時候,xargs 就可能會出現(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":沒有那個文件或目錄 rm:無法刪除 "2.log":沒有那個文件或目錄 rm:無法刪除 "./file":沒有那個文件或目錄 rm:無法刪除 "1.log":沒有那個文件或目錄

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

2. 主要選項

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



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

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

- `-print` 每一個輸出后會添加一個回車換行符,而 `-print0` 則不會。