Linux中,xargs命令的使用

2022-06-29 18:33:12 字數 4161 閱讀 5309

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

鍵入yy確認並執行命令:

touch file1 file2 file3 ?...y

此選項在執行破壞性命令時很有用。

預設情況下,傳遞給命令的引數數目取決於系統的限制。

-n(--max-args)選項指定要傳遞給給定命令的引數數目,xargs根據需要多次執行指定的命令,直到所有引數都用完,

在下面的示例中,從標準輸入讀取的引數數限制為1 .

echo"

file1 file2 file3

" | xargs -n 1 -t touch

從下面的詳細輸出中可以看到,每個引數分別執行touch命令:

touch file1

touch file2

touch file3

要使用xargs執行多個命令,請使用-i選項,它的工作方式是在replace-str選項之後定義乙個-ireplace-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.

strings are equal.

xargs是linux上的命令列實用程式,可以構建和執行命令。

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 ...