原文地址:http://blog.csdn.net/chenzrcd/article/details/50186881

1、作用:

(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符

(2)将多行输入转换为单行


2、使用模式:front command | xargs -option later command

front command: 前一个命令

-option: xargs的选项

later command: 后一个命令


3、xargs常用选项

-n: 指定一次处理的参数个数

-d: 自定义参数界定符

-p: 询问是否运行 later command 参数

-t : 表示先打印命令,然后再执行

-i : 逐项处理

...更多参数查看man xargs


4、使用实例

测试文本:xargs.txt

  1. a b c d e f g   
  2. h i j k l m n   
  3. o p q  
  4. r s t  
  5. u v w x y z  


(1)多行输入单行输出

  1. cat xargs.txt | xargs  

linux xargs命令的使用及其与exec、管道的区别

( 2)指定一次处理的参数个数:指定为5,多行输出

  1. cat xargs.txt | xargs -n 5  

linux xargs命令的使用及其与exec、管道的区别

(3)自定义参数界定符:指定界定符为'm'

  1. cat xargs.txt | xargs -d m  

linux xargs命令的使用及其与exec、管道的区别


(4)询问是否运行 later command 参数

  1. cat xargs.txt | xargs -n 5 -p  

linux xargs命令的使用及其与exec、管道的区别


(5)将所有文件重命名,逐项处理每个参数

  1. ls *.txt |xargs -t -i mv {} {}.bak  

linux xargs命令的使用及其与exec、管道的区别


更多参数选项查看man xargs


5、xargs与管道|的区别

| 用来将前一个命令的标准输出传递到下一个命令的标准输入,xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。

  1. #使用管道将ls的结果显示出来,ls标准输出的结果作为cat的标准输出  
  2. ls | cat  
  3. #使用xargs将ls的结果作为cat的参数,ls的结果为文件名,所以cat 文件名即查看文件内容  
  4. ls | xargs cat  


linux xargs命令的使用及其与exec、管道的区别

6、xargs与exec的区别

(1)exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数

  1. #xargs将参数一次传给echo,即执行:echo begin ./xargs.txt ./args.txt  
  2. find . -name '*.txt' -type f | xargs echo begin  
  3.  #exec一次传递一个参数,即执行:echo begin ./xargs.txt;echo begin ./args.txt  
  4. find . -name '*.txt' -type f -exec echo begin {} \;  

linux xargs命令的使用及其与exec、管道的区别

(2)exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理

  1. #find后的文件名含有空格  
  2. find . -name '*.txt' -type f | xargs cat  
  3. find . -name '*.txt' -type f -exec cat {} \;  
linux xargs命令的使用及其与exec、管道的区别

原因:默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 ('\n'),因此我们看到的 find 的输出都是一行一行的,xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 ./t t.txt 被解释成了两个记录 ./t 和 t.txt, cat找不到这两个文件,所以报错,为了解决此类问题,  让 find 在打印出一个文件名之后接着输出一个 NULL 字符 ('') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符,即 find -print0 和 xargs -0 ,这样就能处理特殊文件名了。
  1. #xargs处理特殊文件名  
  2. find . -name '*.txt' -type f -print0 | xargs -0  cat  

linux xargs命令的使用及其与exec、管道的区别

相关文章:

  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2022-12-23
  • 2021-11-18
猜你喜欢
  • 2021-07-04
  • 2021-12-04
  • 2021-12-07
  • 2021-05-30
  • 2021-09-22
相关资源
相似解决方案