写点什么

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
复制代码

需要注意的是 xargs 后面的默认跟的是 echo 命令,所以它可以单独使用。

-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
复制代码


原文链接:https://rumenz.com/rumenbiji/linux-xargs-skills.html

微信公众号:入门小站

发布于: 刚刚阅读数: 2
用户头像

入门小站

关注

还未添加个人签名 2020.01.18 加入

还未添加个人简介

评论

发布
暂无评论
linux之xargs使用技巧