linux之xargs使用技巧

Unix命令都带有参数,有些命令可以接受”标准输入(stdin)”作为参数。而管道命令(|)的作用,是将左侧命令的标准输出转换为标准输入,提供给右侧命令作为参数使用。虽然,在 Unix 系统中大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数。比如,我们日常使用的 echo 命令就不接受管道传参。而 xargs 命令的作用,就是将标准输入转为命令行参数。
xargs基本用法
# grep命令接受管道传参> cat /etc/passwd | grep root# echo命令不接受管道传参> echo "hello rumenz" | echo# 将标准输入转为命令行参数> echo "hello rumenz" | xargs echohello rumenz
-d指定分隔符,默认使用空格分割
# 空格作为分隔符$ echo "one two three" | xargs mkdir# 指定制表符\t作为分隔符$ echo -e "a\tb\tc" | xargs -d "\t" echoa b c
-p 打印出要执行的命令并询问用户是否要执行
> echo 'one two three' | xargs -p touchtouch one tow three ?...y
-0 表示用 null 当作分隔符
find命令有一个特别的参数-print0,用来指定输出的文件列表以null作为分隔符
> find /path -type f -print0 | xargs -0 rm
指定多少行作为一个命令行参数
> xargs -L 1 find -name"*.txt"./1.txt./rumenz.txt./2.txt./3.txt
-n指定每次将多少项作为命令行参数
> echo {0..9} | xargs -n 2 echo
指定每一项命令行参数的替代字符串
# 将命令行参数传给多个命令> cat foo.txtonetwothree> cat foo.txt | xargs -I {} sh -c 'echo {}; mkdir {}'onetwothree> lsone two three
将多行输入转换成单行输入
> cat rumenz.txt1 2 3 45 67 8 9> cat rumenz.txt | xargs1 2 3 4 5 6 7 8 9
将单行文本转换成多行
> cat rumenz.txt1 2 3 4 5 6 7 8 9> cat rumenz.txt | xargs -n 31 2 34 5 67 8 9
指定分隔符进行行转换
> echo "rumenz:123:rumenz:456:rumenz:789" | xargs -d : -n 2rumenz 123rumenz 456rumenz 789
xargs和find结合
> find . -type f -name "*.txt" -print | xargs rm -f
批量下载文件
> cat rumenz.txt | xargs wget -c

浙公网安备 33010602011771号