xargs 又称管道命令,构造参数等。是给命令传递参数的一个过滤器,也是组合多个命令的一个工具 它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理 。简单的说 就是把 其他命令的给它的数据 传递给它后面的命令作为参数
主要参数
-d 为输入指定一个定制的分割符
-i 用 {} 代替 传递的数据
-I string 用string来代替传递的数据-n[数字] 设置每次传递几行数据
-n 选项限制单个命令行的参数个数
-t 显示执行详情
-p 交互模式
-P n 允许的最大线程数量为n
-s[大小] 设置传递参数的最大字节数(小于131072字节)
-x 大于 -s 设置的最大长度结束 xargs命令执行
[root@localhost ~]# ls |grep .php |xargs -i mv {} {}.bak #将当前目录下php文件,改名字 [root@localhost ~]# ls |grep .php |xargs -I {} mv {} {}.bak #与上例相同 [root@localhost ~]# find ./ -name "*.tmp" | xargs -i rm -rf {} #删除当前文件夹下的,tmp文件
# find ./ -type f -print0 |xargs -0 rm #删除该目录的所有普通文件 # find ./ -type f -exec rm '{}' \; #同上 # find ./ -type f -exec rm '{}' + #同上
# svn st | awk '{print $2}' | xargs svn revert #还原当前目录下跟SVN版本库有差异的所有文件
[root@localhost ~]# find ./ -name "*.json" | xargs grep baidu #查找所有含有baidu关键词的json文件
# 该命令用于从当前路径开始寻找包含特定字符串的文件。例子中可以看出,在test.txt文本中找到了字符串并打印了该行。
# find .| xargs grep "this is a test for finding" 2>null
[root@120 ~]# cat file1
a=1
b=2
c=3
d=4
[root@120 ~]# cat file2
a=1
b=2
c=3
[root@120 ~]# grep -wf file1 file2 | xargs -i sed -i '/{}/d' file1 file2
[root@120 ~]# cat file1
d=4
[root@120 ~]#
[root@120 ~]# cat file2
[root@120 ~]#
a) 将多行文本转换单行输出 [root@bogon myDemo]# cat a 1 2 3 4 5 6 7 8 9 0 a s d f g z x c v b q w e r t [root@bogon myDemo]# cat a |xargs 1 2 3 4 5 6 7 8 9 0 a s d f g z x c v b q w e r t b) Xargs -n3,限制每行输出三个 [root@bogon myDemo]# cat a|xargs -n3 1 2 3 4 5 6 7 8 9 0 a s d f g z x c v b q w e r t c) -d 可以自定义一个定界符 [root@bogonmyDemo]# echo "wWwWw.WbWaWiWdWuW.WcWoWm" |xargs -Dw w w w. b a i d u . c o m #将W作为界定符 d) -n -d 结合使用结合使用 [root@bogon myDemo]# echo "1 2 3 4 5 6 7 8 9"| xargs -d6 -n3 1 2 3 4 5 7 8 9 #这样的输出结果说明xargs按照6分隔符将字符串分为了两部分12345 和 789 [root@bogon myDemo]# echo "adas2esda2 dsa 2dasd2ds" |xargs -d2 -n2 adas esda dsa dasd ds e) Xargs -I选项,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次 下面是将文件中的所有字符当做新文件的名字进行创建, [root@bogon myDemo]# cat a |xargs -i touch {} [root@bogon myDemo]# ls 1 2 3 4 5 6 7 8 9 0 a a s d f g q w e r t z x c v b [root@bogon myDemo]# pwd /home/myDemo 再将所有的创建的删除 [root@bogon myDemo]# ls * 1 2 3 4 5 6 7 8 9 0 a a s d f g q w e r t z x c v b [root@bogon myDemo]# ls |xargs -i rm -f {} [root@bogon myDemo]# ls f) 实例 将文件或者文件夹改名 [root@bogon myDemo]# ls a b [root@bogon myDemo]# ls |xargs -i mv {} {}.bak [root@bogon myDemo]# ls a.bak b.bak [root@bogon myDemo]# 删除指定文件 [root@bogon myDemo]# ls a.xx b.xx c [root@bogon myDemo]# ls *.xx a.xx b.xx [root@bogon myDemo]# ls *.xx | xargs -i rm -f {} [root@bogon myDemo]# ls c
# echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split
评论(0)
暂无评论