1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        學(xué)習(xí)一個 Linux 命令:xargs 命令

        共 4296字,需瀏覽 9分鐘

         ·

        2021-03-16 07:46


        轉(zhuǎn)自:戀貓大鯉魚

        https://dablelv.blog.csdn.net/article/details/5423387

        1.命令簡介

        xargs 可以將 stdin 中以空格或換行符進(jìn)行分隔的數(shù)據(jù),形成以空格分隔的參數(shù)(arguments),傳遞給其他命令。因為以空格作為分隔符,所以有一些文件名或者其他意義的字符串內(nèi)含有空格的時候,xargs 可能會誤判。簡單來說,xargs 的作用是給其他命令傳遞參數(shù),是構(gòu)建單行命令的重要組件之一。

        之所以要用到 xargs,是因為很多命令不支持使用管道 | 來傳遞參數(shù),例如:

        find /sbin -perm +700 | ls -l         # 這個命令是錯誤,因為標(biāo)準(zhǔn)輸入不能作為ls的參數(shù)
        find /sbin -perm +700 | xargs ls -l   # 這樣才是正確的

        2.命令格式

        xargs [OPTIONS] [COMMAND]

        3.選項說明

        注意,長選項的強制性參數(shù)對于短選項也是強制的。

        -0, --null
         如果輸入的 stdin 含有特殊字符,例如反引號 `、反斜杠 \、空格等字符時,xargs 將它還原成一般字符。為默認(rèn)選項
        -a, --arg-file=FILE
         從指定的文件 FILE 中讀取輸入內(nèi)容而不是從標(biāo)準(zhǔn)輸入
        -d, --delimiter=DEL
         指定 xargs 處理輸入內(nèi)容時的分隔符。xargs 處理輸入內(nèi)容默認(rèn)是按空格和換行符作為分隔符,輸出 arguments 時按空格分隔
        -E EOF_STR
         EOF_STR 是 end of file string,表示輸入的結(jié)束
        -e, --eof[=EOF_STR]
         作用等同于 -E 選項,與 -E 選項不同時,該選項不符合 POSIX 標(biāo)準(zhǔn)且 EOF_STR 不是強制的。如果沒有 EOF_STR 則表示輸入沒有結(jié)束符
        -I REPLACE_STR
         將 xargs 輸出的每一項參數(shù)單獨賦值給后面的命令,參數(shù)需要用指定的替代字符串 REPLACE_STR 代替。REPLACE_STR 可以使用 {} $ @ 等符號,其主要作用是當(dāng) xargs command 后有多個參數(shù)時,調(diào)整參數(shù)位置。例如備份以 txt 為后綴的文件:find . -name "*.txt" | xargs -I {}  cp {} /tmp/{}.bak
        -i, --replace[=REPLACE_STR]
         作用同 -I 選項,參數(shù) REPLACE_STR 是可選的,缺省為 {}。建議使用 -I 選項,因為其符合 POSIX
        -L MAX_LINES
         限定最大輸入行數(shù)。隱含了 -x 選項
        -l, --max-lines[=MAX_LINES]
         作用同 -L 選項,參數(shù) MAX_LINES 是可選的,缺省為 1。建議使用 -L 選項,因為其符合 POSIX 標(biāo)準(zhǔn)
        -n, --max-args=MAX_ARGS
         表示命令在執(zhí)行的時候一次使用參數(shù)的最大個數(shù)
        -o, --open-tty
         在執(zhí)行命令之前,在子進(jìn)程中重新打開stdin作為/dev/TTY。如果您希望xargs運行交互式應(yīng)用程序,這是非常有用的
        -P, --max-procs=MAX_PROCS
         每次運行最大進(jìn)程;缺省值為 1。如果 MAX_PROCS 為 0,xargs 將一次運行盡可能多的進(jìn)程。一般和 -n 或 -L 選項一起使用
        -p, --interactive
         當(dāng)每次執(zhí)行一個 argument 的時候詢問一次用戶
        --process-slot-var=NAME
         將指定的環(huán)境變量設(shè)置為每個正在運行的子進(jìn)程中的唯一值。一旦子進(jìn)程退出,將重用該值。例如,這可以用于初始負(fù)荷分配方案
        -r, --no-run-if-empty
         當(dāng) xargs 的輸入為空的時候則停止 xargs,不用再去執(zhí)行后面的命令了。為默認(rèn)選項
        -s, --max-chars=MAX_CHARS
         命令行的最大字符數(shù),指的是 xargs 后面那個命令的最大命令行字符數(shù),包括命令、空格和換行符。每個參數(shù)單獨傳入 xargs 后面的命令
        --show-limits
         顯示操作系統(tǒng)對命令行長度的限制
        -t, --verbose
         先打印命令到標(biāo)準(zhǔn)錯誤輸出,然后再執(zhí)行
        -x, --exit
         配合 -s 使用,當(dāng)命令行字符數(shù)大于 -s 指定的數(shù)值時,退出 xargs
        --help
         顯示幫助信息并退出
        --version
         顯示版本信息并退出

        4.常用示例

        (1)將 Shell 的特殊字符反引號還原為一般字符。

        echo '`0123`4 56789' | xargs -t echo
        echo `0123`4 56789 
        `0123`4 56789

        如果直接進(jìn)行如下操作,會報無法找到命令 01234 的錯誤,因為反引號在 Shell 中會將 01234 作為一個命令來執(zhí)行,但是 01234 不是一個命令。-t 表示先打印命令,然后再執(zhí)行。

        echo `01234` 56789
        -bash: 01234: command not found
        56789

        (2)設(shè)置 xargs 讀入?yún)?shù)時的結(jié)束標(biāo)識,以逗號結(jié)束。這里要注意結(jié)束標(biāo)志必須要是單獨的字段,即以空格或者換行符分隔的字段。

        echo 01234 , 56789 | xargs -E ","
        01234

        (3)使用 rm、mv 等命令同時操作多個文件時,有時會報 “argument list too long” 參數(shù)列表過長的錯誤,此時可以使用 xargs 來解決。xargs 將標(biāo)準(zhǔn)輸入的字符串分隔后,作為參數(shù)傳遞給后面的命令。例如,給當(dāng)前目錄的所有文件添加后綴名。

        ls | xargs -t -i mv {} {}.bak

        # 選擇符合條件的文件
        ls | grep -E "201701|201702|201703" | xargs -I {} mv {} {}.bak

        (4)設(shè)置命令行的最大字符數(shù)。參數(shù)默認(rèn)一個一個單獨傳入命令中執(zhí)行。

        echo "01234 56789" | xargs -t -s 11
        echo 01234 
        01234
        echo 56789 
        56789

        (5)設(shè)置標(biāo)準(zhǔn)輸入中每次多少行作為命令的參數(shù),默認(rèn)是將標(biāo)準(zhǔn)輸入中所有行的歸并到一行一次性傳給命令執(zhí)行。

        echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
        echo 01234 56789 
        01234 56789
        echo 01234 
        01234

        (6)將文件內(nèi)容以空格分隔合并為一行輸出。

        # 列出文件內(nèi)容
        cat test.txt
        a b c d e
        f g h i j 
        k l m n o

        # 多行輸入合并為一行輸出
        cat test.txt | xargs
        a b c d e f g h i j k l m n o

        (7)與 ps、grep、awk 和 kill 結(jié)合,強制終止指定進(jìn)程。

        ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9

        ps \-ef|grep spp用于查找包含 spp 的進(jìn)程,awk '{printf "%s ",$2,FNR}將目標(biāo)進(jìn)程 ID 打印輸出,xargs kill \-9則將目標(biāo)進(jìn)程 ID 作為參數(shù)傳遞給kill \-9用于殺死進(jìn)程。


        參考文獻(xiàn)

        [1] xargs(1) manual
        [2] CSDN.Xargs用法詳解
        [3] CSDN.linux xargs詳解

        瀏覽 67
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美高清无码在线 | 伊人久久男人的天堂 | 波多野吉衣之潜藏淫欲 | 成人免费看AA片 | 日韩一级电影在线 | 揉我胸 啊 嗯出奶了黄 | 精品国产一区二区三区四区在线 | 一级 黄 色 片69 | 一区二区三区av 嫩BX区二区三区的区别 | 国产又粗又长又猛又爽 |