當(dāng)前位置:首頁 > IT技術(shù) > 系統(tǒng)服務(wù) > 正文

linux之xargs使用技巧
2021-10-21 23:04:56

image-20210603130606567

Unix命令都帶有參數(shù),有些命令可以接受”標(biāo)準(zhǔn)輸入(stdin)”作為參數(shù)。而管道命令(|)的作用,是將左側(cè)命令的標(biāo)準(zhǔn)輸出轉(zhuǎn)換為標(biāo)準(zhǔn)輸入,提供給右側(cè)命令作為參數(shù)使用。雖然,在 Unix 系統(tǒng)中大多數(shù)命令都不接受標(biāo)準(zhǔn)輸入作為參數(shù),只能直接在命令行輸入?yún)?shù),這導(dǎo)致無法用管道命令傳遞參數(shù)。比如,我們?nèi)粘J褂玫?echo 命令就不接受管道傳參。而 xargs 命令的作用,就是將標(biāo)準(zhǔn)輸入轉(zhuǎn)為命令行參數(shù)。

xargs基本用法

# grep命令接受管道傳參
> cat /etc/passwd | grep root

# echo命令不接受管道傳參
> echo "hello rumenz" | echo

# 將標(biāo)準(zhǔn)輸入轉(zhuǎn)為命令行參數(shù)
> echo "hello rumenz" | xargs echo
hello rumenz

需要注意的是 xargs 后面的默認(rèn)跟的是 echo 命令,所以它可以單獨(dú)使用。

-d指定分隔符,默認(rèn)使用空格分割

# 空格作為分隔符
$ echo "one two three" | xargs mkdir

# 指定制表符	作為分隔符
$ echo -e "a	b	c" | xargs -d "	" echo
a b c

-p 打印出要執(zhí)行的命令并詢問用戶是否要執(zhí)行

> echo 'one two three' | xargs -p touch
touch one tow three ?...y

-0 表示用 null 當(dāng)作分隔符

find命令有一個(gè)特別的參數(shù)-print0,用來指定輸出的文件列表以null作為分隔符

> find /path -type f -print0 | xargs -0 rm

指定多少行作為一個(gè)命令行參數(shù)

> xargs -L 1 find -name
"*.txt"
./1.txt
./rumenz.txt
./2.txt
./3.txt

-n指定每次將多少項(xiàng)作為命令行參數(shù)

> echo {0..9} | xargs -n 2  echo 

指定每一項(xiàng)命令行參數(shù)的替代字符串

# 將命令行參數(shù)傳給多個(gè)命令
> cat foo.txt
one
two
three

> cat foo.txt | xargs -I {} sh -c 'echo {}; mkdir {}'
one
two
three

> ls
one two three

將多行輸入轉(zhuǎn)換成單行輸入

> cat rumenz.txt
1 2 3 4
5 6
7 8 9
> cat rumenz.txt | xargs
1 2 3 4 5 6 7 8 9

將單行文本轉(zhuǎn)換成多行

> cat rumenz.txt
1 2 3 4 5 6 7 8 9
> cat rumenz.txt | xargs -n 3
1 2 3
4 5 6
7 8 9

指定分隔符進(jìn)行行轉(zhuǎn)換

> echo "rumenz:123:rumenz:456:rumenz:789" | xargs -d : -n 2
rumenz 123
rumenz 456
rumenz 789

xargs和find結(jié)合

> find . -type f -name "*.txt" -print | xargs rm -f

批量下載文件

> cat rumenz.txt | xargs wget -c

原文鏈接:https://rumenz.com/rumenbiji/linux-xargs-skills.html
微信公眾號(hào):入門小站

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >