描述和介紹
xargs命令通常用於命令行中,其中一個命令的輸出作為輸入參數傳遞給另一個命令。
在許多情況下,由於“管道”和“重定向”操作符執行相同類型的事務,因此不需要特殊命令(如xargs)來完成此操作。 但是,有時基本的管道和重定向機制存在問題,例如,如果參數包含空格,那麼xargs就會克服。
此外,如果需要,xargs會重複執行指定的命令,以處理給定的所有參數。 實際上,您可以指定每次xargs執行指定的命令時應從標準輸入流中讀取多少個參數。
通常,如果將一個命令的輸出用作數據流式傳輸的第二個命令(使用管道運算符“|”)的選項或參數的一部分,則應使用xargs命令。 如果數據打算成為第二個命令的(標準)輸入,則常規管道就足夠了。
例如,如果使用ls命令生成文件名和目錄列表,然後將此列表通過管道傳遞給執行echo的xargs命令,那麼可以指定echo在每次迭代中處理多少個文件名或目錄名,如下所示:
ls | xargs -n 5迴聲在這種情況下, echo一次接收五個文件或目錄名稱。 由於echo在最後添加了換行符,因此每行都會寫入五個名稱。
如果您執行的命令返回大量不可預知的數字項目(例如文件名稱),並將其傳遞給另一個命令以供進一步處理,那麼控制第二個命令接收的最大參數數量以避免過載和崩潰是一個好主意。
以下命令行將查找 int產生的文件名流分割為200個組,然後傳遞給cp命令, cp命令將它們複製到備份目錄。
找到./ -type f -name“* .txt”-print | xargs -l200 -i cp -f {} ./backupfind命令中的“./”元素指定用於搜索的當前目錄。 “-type f”參數將搜索限制為文件,“-name”* .txt“標誌進一步過濾掉任何沒有”.txt“擴展名的文件.xargs中的-i標誌表示{ }表示法表示蒸汽的每個文件名。
以下命令在/ tmp目錄中找到名為core的文件並刪除它們。
find / tmp -name core -type f -print | xargs / bin / rm -f
請注意,如果有任何包含換行符,單引號或雙引號或空格的文件名,這將不正確。 以下版本以包含單引號,雙引號,空格或換行符的文件名或目錄名正確處理的方式處理文件名。
find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
除了-i選項,您還可以使用-I標誌來指定在命令參數中由輸入行替換的字符串,如下例所示:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
替換字符串被定義為“{}”。 這意味著,在命令參數中出現的任何“{}”將被通過管道操作轉發給args的輸入元素替換。 這使您可以將輸入元素放置在要重複執行的命令參數中的特定位置。