xargs
程式允許你從標準輸入生成和執行命令,它通常通過管道與其他命令結合使用。
使用xargs,您可以提供標準輸入作為命令列實用程式(例如mkdir和rm)的引數。
在本教程中,介紹使用xargs
命令的基本知識。
xargs
從標準輸入讀取引數,用空格或換行符分隔,並使用輸入作為命令的引數執行指定的命令,如果未提供命令,則預設值為/bin/echo。
xargs
命令的語法如下所示:
xargs [options] [command [initial-arguments]]
使用xargs
的最基本示例是使用xargs
的管道傳遞幾個以空格分隔的字串,並執行乙個命令,這些字串將用作引數。
echo "file1 file2 file3
" | xargs touch
在上面的示例中,標準輸入傳遞給xargs
,並為每個引數執行touch
命令,建立三個檔案,這與執行以下命令相同:
touch file1 file2 file3
要在終端上列印命令,請在執行該命令之前使用-t
(--verbose
)選項:
echo "file1 file2 file3
" | xargs -t touch
touch file1 file2 file3
如果要獲得提示是否在執行每個命令之前執行它,請使用-p
(--interactive
)選項:
echo"file1 file2 file3
" | xargs -p touch
鍵入y
或y
確認並執行命令:
touch file1 file2 file3 ?...y
此選項在執行破壞性命令時很有用。
預設情況下,傳遞給命令的引數數目取決於系統的限制。
-n
(--max-args
)選項指定要傳遞給給定命令的引數數目,xargs
根據需要多次執行指定的命令,直到所有引數都用完,
在下面的示例中,從標準輸入讀取的引數數限制為1 .
echo"file1 file2 file3
" | xargs -n 1 -t touch
從下面的詳細輸出中可以看到,每個引數分別執行touch命令:
touch file1touch file2
touch file3
要使用xargs
執行多個命令,請使用-i
選項,它的工作方式是在replace-str
選項之後定義乙個-i
,replace-str
的所有匹配項都替換為傳遞給xargs的引數,
以下xargs示例將執行兩個命令,首先將使用touch建立檔案,然後使用ls命令列出檔案:
echo"file1 file2 file3
" | xargs -t -i % sh -c ''
-rw-r--r-- 1 linuxize users 0 may 6 11:54file1-rw-r--r-- 1 linuxize users 0 may 6 11:54file2
-rw-r--r-- 1 linuxize users 0 may 6 11:54 file3
replace-str
的乙個常見選擇是%
,但是你可以使用另乙個佔位符,例如args
:
echo"file1 file2 file3
" | xargs -t -i args sh -c ''
使用-d
(--delimiter
)選項可設定自定義分隔符,這個分隔符可以是單個字元或以。
以下示例使用;
作為分隔符:
echo "file1;file2;file3
" | xargs -d ; -t touch
touch file1 file2 file3
xargs命令還可以從檔案中讀取項而不是標準輸入,為此,使用-a
(--arg-file
)選項後跟檔名,
在以下示例中,xargs命令將讀取ips.txt檔案並ping每個ip位址。
我們也使用-l 1
選項,它指示xargs
一次讀取一行,如果省略此選項,xargs會將所有ip傳遞給單個ping命令。
xargs -t -l 1 -a ips.txt ping -c 1
ping -c 1 8.8.8.8ping 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1ms
...ping -c 1 1.1.1.1ping 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms
xargs最常與find命令結合使用。可以使用find
搜尋特定檔案,然後使用xargs
對這些檔案執行操作。
為了避免包含換行符或其他特殊字元的檔名出現問題,請始終使用find-print0
選項,該選項使find
列印空字元後跟,xargs
使用-0
,(--null
)選項可以正確解釋此輸出。
在下面的示例中,find將顯示/var/www/.cache目錄中所有檔案的全名,xargs會將檔案路徑傳遞給rm命令:
find /var/www/.cache -type f -print0 | xargs -0 rm -f
xargs
還可以用作從給定字串的兩側刪除空白的工具,只需將字串通過管道傳遞給xargs
命令,它就可以進行修剪:
echo"long line
" | xargs
long line
這在比較shell指令碼中的字串時很有用。
#!/bin/bash
var1="
linuxize
"var2="
linuxize
"if [[ "
$var1
" == "
$var2
"]]; then
echo
"strings are equal.
"else
echo
"strings are not equal."fi
## using xargs to trim var1
if [[ $(echo "
$var1
" | xargs) == "
$var2
"]]; then
echo
"strings are equal.
"else
echo
"strings are not equal.
"fi
strings are not equal.xargs是linux上的命令列實用程式,可以構建和執行命令。strings are equal.
xargs命令在linux運維開發中的使用
在集群運維開發過程中,根據實際開發場景,我們經常會需要大量檔案做批處理操作,無論是linux本地上的,還是hdfs上的檔案,我們都可以用xargs 命令對其逐一處理。這裡xargs命令更多的可以當作是運維開發過程中的乙個小工具,快速對批檔案做diy處理,非常靈活。ref21 xargs命令是給其他命...
Linux中命令引數的傳遞 xargs
xargs用於linux下命令引數的傳遞 管道符 作用為將前一命令的stdout作為後一命令的stdin xargs與之有別,將前一命令的stdout作為後一命令的引數 示例 root server echo help cat help root server echo help xargs cat...
Linux基礎 xargs命令
xargs可以將輸入內容 通常通過命令列管道傳遞 轉成後續命令的引數,通常用途有 命令組合 尤其是一些命令不支援管道輸入,比如ls。避免引數過長 xargs可以通過 nx來將引數分組,避免引數過長。使用語法如下 usage xargs option command initial args.run ...