xargs的基本用法

xargs作为命令协助符,有很多特别的用处。

xargs 是 execute arguments 的缩写,它的作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为那个命令的参数来执行。

标准输入 -> xargs转换 -> 后续命令(标准输入变为该命令参数)

xags的常见用法有

1. 格式化输出
2. 传递参数
3. 分批执行命令

1. 格式化输出

1.1 多行变单行

定义一个测试文件,内有多行文本数据:

cat test.txt

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

多行输入单行输出:

cat test.txt | xargs

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

1.2 指定数量分行

cat test.txt | xargs -n3

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

1.3 指定字符分割

-d 选项 可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

1.4 指定字符分割并换行

结合 -n 选项 使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

2. 传递参数

2.1 -p实现命令确认,执行命令先确认

find . -type f |xargs -p rm -f
rm -f ./china.txt ./usa.txt ./japan.txt ?...n

2.2 -p,-n实现每个命令都确认

find . -type f |xargs -p -n 1 rm -f
rm -f ./china.txt ?...n
rm -f ./usa.txt ?...y
rm -f ./japan.txt ?...n

2.3 -I实现前面输入参数的别名,方便后续命令书写调用

复制所有图片文件到 /data/images 目录下,{}就是签名参数的别名,方便cp命令调用:

ls *.jpg | xargs -n1 -I{} cp {} /data/images

对目录下的所有文件批量重命名为.bak后缀

ls | xargs -t -I {} mv {} {}.bak

2.4 使用 -I 选项可以让 xargs 执行多个命令

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

%是签名输入参数别名,sh -c是解释器,解释执行后面的字符串,执行了echo和mkdir两个命令

3. 分批执行命令

3.1 用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 可以分批执行,解决问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

3.2 统计一个源代码目录中所有 php 文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

3.3 查找所有的 jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

 

出处:https://www.cnblogs.com/nul1/p/12123209.html
     https://wangchujiang.com/linux-command/c/xargs.html
     https://blog.csdn.net/liaowenxiong/article/details/118875087

posted @ 2023-03-02 17:08  全玉  阅读(555)  评论(0编辑  收藏  举报