博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux:xargs命令详解
阅读量:4496 次
发布时间:2019-06-08

本文共 2054 字,大约阅读时间需要 6 分钟。

xargs

给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一

 


 

 

语法

xargs (选项)cmd

 

选项

-0 当sdtin含有特殊字元时候,将其当成一般字符,/’空格等。 -a file 从文件中读入作为sdtin。-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。-p 当每次执行一个argument的时候询问一次用户。-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。-t 表示先打印命令,然后再执行。-i 或者是-I,这得看Linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。-s num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数。-L  num Use at most max-lines nonblank input lines per command line.-s是含有空格的。-l  同-L-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。-x exit的意思,主要是配合-s使用。-P 修改最大的进程数,默认是1,为0时候为as many as it can 。

 

实例

 

xargs用作替换工具,读取输入数据重新格式化后输出

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

cat test.txt 输入: a b c d e f gh i j k l m no p qr s tu 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

 

-n选项多行输出:

cat test.txt | xargs -n3结果:a b cd e fg h ij k lm n op q rs t uv w xy z

 

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

echo "nameXnameXnameXname" | xargs -dX结果:name name name name

 

结合-n选项使用:

echo "nameXnameXnameXname" | xargs -dX -n2结果:name name name name

 

读取stdin,将格式化后的参数传递给命令

假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:

#!/bin/bash#sk.sh命令内容,打印出所有参数。echo $*

 

arg.txt文件内容:

cat arg.txt结果:aaabbbccc

 

xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l结果:-p aaa -l-p bbb -l-p ccc -l

 

复制所有图片文件到 /data/images 目录下

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

 

xargs结合find使用

用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:

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

 

xargs -0将\0作为定界符。

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

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

 

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

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

 

xargs其他应用

假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:

cat url-list.txt | xargs wget -c

 

 

转载于:https://www.cnblogs.com/Spiro-K/p/6361951.html

你可能感兴趣的文章
数据解析01-15
查看>>
linux 安装mysql数据库——yum安装法
查看>>
Several ports (8005, 80, 8009) required by Tomcat v6.0 Server at localhost are already in use
查看>>
事件监听器
查看>>
设计模式之单例设计模式
查看>>
异常的基本概念
查看>>
vue 在发送axios请求时数据渲染问题
查看>>
动态链接库dll
查看>>
2018 Multi-University Training Contest 3 - HDU Contest
查看>>
组合数取模(转载)
查看>>
9.2NOIP模拟题
查看>>
整合SpringDataJpa
查看>>
vue过渡
查看>>
tcpreplay 博客目录
查看>>
oracle11g忘记sys密码
查看>>
文件各种上传,离不开的表单
查看>>
mysql查询插入优化
查看>>
hadoop备战:yarn框架的搭建(mapreduce2)
查看>>
微信公众号开发模式开启总结
查看>>
pygame-KidsCanCode系列jumpy-part2-加速度与摩擦力
查看>>