xargs命令

xargs命令紧跟在管道操作符之后,以标准输入作为主要的源数据流。其擅长将标准输入数据转化成命令行参数;也可以将单行或多行文本输入,转化为其他格式(如单行变多行,多行变单行)。

xargs使用说明如下:
这里写图片描述

1 格式化输出
现有example.txt文件内容如下:

[root@middle-server tmp]# cat example.txt 
a b c d
e f g
h i
j

例1 将多行输入转换成单行输出

[root@middle-server tmp]# cat example.txt | xargs
a b c d e f g h i j

说明:xargs默认的分隔符为空格,通过将换行符用空格进行提换即可实现多行转单行。

例2 将单行输入转换成多行输出

[root@middle-server tmp]# cat example.txt | xargs -n 3
a b c
d e f
g h i
j

说明:-n用来指定每行最大参数数量,每个参数默认是有空格分隔开的字符串。

例3 按照指定分隔符分隔

[root@middle-server tmp]# echo "abc#def#ghi#jkl#" | xargs -d \# 
abc def ghi jkl 

[root@middle-server tmp]# echo "abcXdefXghiXjklX" | xargs -d X -n 2
abc def
ghi jkl

说明:如果不想使用默认的空格作为分隔符,可以通过-d选项来指定作为分隔符的字符。对于#这样的特殊字符需要前加反斜线转译。

2 提供命令行参数
例4 将输出直接追加到命令行后面作为参数

[root@middle-server tmp]# echo "abcXdefXghiXjklX" | xargs -d X ./testCmd.sh 
abc def ghi jkl #
[root@middle-server tmp]# echo "abcXdefXghiXjklX" | xargs -d X -n 2 ./testCmd.sh 
abc def #
ghi jkl #
#

说明:当xargs转换后的输出格式为多行时,这个命令会自行多次。

例5 按照固定格式提供命令行参数

[root@middle-server tmp]# echo "abcXdefXghiXjkl" | xargs -d X -I {} ./testCmd.sh -p {}  -f example.txt 
-p abc -f example.txt #
-p def -f example.txt #
-p ghi -f example.txt #
-p jkl -f example.txt #

说明:当需要按照固定格式传递参数时,可以用-I {}来实现。-I选项后面的{}代表的是每个参数,命令行参数部分的{}都会被从stdin读取到的参数替换掉。
注意,当-I与xargs结合使用的时候,每个参数是以分隔符来划分读取的,格式化选项-n是不起作用的,如:

[root@middle-server tmp]# echo "abcXdefXghiXjkl" | xargs -d X -n 2 -I {} ./testCmd.sh -p {}  -f example.txt 
-p abc -f example.txt #
-p def -f example.txt #
-p ghi -f example.txt #
-p jkl -f example.txt #

例6 结合find使用xargs

[root@middle-server tmp]# find . -type f -name "*.txt" -print0 | xargs -0 ls -l 
-rw-r--r-- 1 root root 20 May 31 08:57 ./example.txt
-rw-r--r-- 1 root root  0 May 31 10:33 ./file1.txt
-rw-r--r-- 1 root root  0 May 31 10:33 ./file2.txt
-rw-r--r-- 1 root root  0 May 31 10:33 ./file3.txt
-rw-r--r-- 1 root root  0 May 31 10:33 ./file4.txt
-rw-r--r-- 1 root root  0 May 31 10:33 ./file5.txt

说明:使用find命令查找后缀为.txt的文本文件,然后将结果经xargs传给命令行。需要注意的是,find命令输出的结果中的分隔符是无法预测的,有可能是’\n’换行或’ ‘空格,并且文件名中也可能包含空格。所以,这里使用-print0以null(’\0’)来做分隔符。xargs通过-0来指定使用null作为分隔符。

参考书籍:
Linux Shell 脚本攻略 (第二版)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的find和xargs命令通常一起使用,以便对匹配到的文件进行处理。find命令用于查找文件和目录,而xargs命令用于将find命令获取到的文件批量传递给其他命令进行处理。[1] 通过将find命令的输出传递给xargs命令xargs命令每次只获取一部分文件而不是全部,这样可以分批处理文件,避免因文件过多而导致溢出错误。 这对于那些对能够传递给exec命令的参数长度有限制的系统尤其有用。 使用xargs命令的格式通常为: find <目录> <搜索条件> | xargs <命令> 其中,<目录>指定要搜索的目录,<搜索条件>指定要查找的文件类型、文件名等条件,<命令>是要对匹配到的文件进行的具体操作命令。 通过这种方式,我们可以方便地对匹配到的文件进行批量处理,比如复制、移动、删除等操作。同时,xargs命令还支持将find命令的输出作为命令行参数传递给其他命令,进一步扩展了命令的功能和灵活性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Linux命令-find命令xargs](https://blog.csdn.net/weixin_43727674/article/details/118223282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [linux find命令xargs简单概述](https://download.csdn.net/download/weixin_38704922/12844570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值