shell學習四十五天 xargs

2021-07-03 18:49:46 字數 2599 閱讀 8168

執行命令:xargs

當find

產生乙個檔案列表時

,該列表提供給另乙個命令有時是很有用的.

案例:

$touch abc.c erd.c oiy.c

$ll./erd.c

./abc.c

./oiy.c

$find -name '*.c'| rm

rm: 缺少運算元

請嘗試執行"rm --help"

來獲取更多資訊。

$find -name '*.c'| xargs rm

$find -name '*.c'

無任何顯示,

說明已成功刪除.

1.簡介,

之所以能用到這個命令

,關鍵是由於很多命令不支援管道

(|)來傳遞引數

,而日常工作中有這個必要

,所以就有了

xargs 命令,

如上例.

xargs可以讀入

stdin

的資料,

並且以空白子元或斷行子元作為分辨,將

stdin

的資料分隔成為

atguments,

因為是以空白子元作為分隔,所以

,如果有一些檔名或者其他有意義的名詞內含空白子元的時候

,xargs

就可能會出現誤判了.

$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

當每次執行乙個argument

的時候諮詢問一次使用者.

-n num

後面加次數,

表示命令在執行的時候一次用

arguments

的個數,

預設是用所有的.

-t便是先列印命令,

然後在執行 -i

或者是-i,

將xargs

的每項名稱

,一般是一行一行的賦值給

{},可以用

{}代替

-r no-run-if-enpty

當xargs

的輸入為空的時候則停止

xargs,

不用再去執行了

-s num

命令列的最大字元數

-d delim

分隔符,

預設的xargs

分隔符是回車

,argument

的分隔符是空格

,這裡修改的是

xargs

的分隔符 -x

exit的意思

,主要是匹配

-s使用 -p

修改最大的程序數,

預設是1,為0

的時候as mang as it can

find -print和

-print0

的區別:

-print每乙個輸出後會新增乙個回車換行符,而

-print0

則不會.

JavaScript學習筆記 四十五 策略

策略模式能夠讓你在執行時選擇演算法。你的 使用者可以處理相同的介面但可以從一些可用的演算法中挑選演算法去處理他們具體的任務,依賴於他們打算做什麼的環境。乙個使用策略模式的示例將是處理表單驗證。你可以通過validate 方法建立乙個驗證器 validator 物件,這個方法將會被呼叫,不管表單的具體...

python爬蟲學習第十五天

from urllib.request import urlopen from bs4 import beautifulsoup import re import datetime import random def randomurl articleurl url articleurl html ...

python 學習第十五天(繼承)

python中繼承分為單繼承和多繼承 class parent1 如果沒有繼承,python3中會預設繼承object這個類 pass class parent2 pass class son1 parent1 單繼承,父類是parent1 pass class son2 parent1,paren...