找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux命令详解- xargs

2019-9-5 05:31| 发布者: admin| 查看: 1335| 评论: 0

摘要: 使用的Linux系统版本信息:# cat /etc/redhat-releaseCentOSrelease 6.10 (Final)系统所有信息:# uname -aLinux linux2.6.32-754.el6.x86_64 #1 SMP Tue Jun 19 21:26:04 UTC 2018 x86_64 x86_64 x86_64GNU/Linuxxa ...


使用的Linux系统版本信息:

[root@linuxshell]# cat /etc/redhat-release

CentOSrelease 6.10 (Final)

系统所有信息:

[root@linuxshell]# uname -a

Linux linux2.6.32-754.el6.x86_64 #1 SMP Tue Jun 19 21:26:04 UTC 2018 x86_64 x86_64 x86_64GNU/Linux

xargs:

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

xargs的默认命令是echo,空格是默认定界符。  默认替换符号是{}

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

参数:

  • -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 从标准输入一次读取 num 行送给 command 命令。

  • -l 同 -L。

  • -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。

  • -x exit的意思,主要是配合-s使用。。

  • -P 修改最大的进程数,默认是1,为0时候为as many     as it can

实例

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

[root@linuxshell]# cat awk.txt

total 1564

drwxr-xr-x.2 root root   4096 Aug 14 14:53 1

-rw-r--r--.1 root root      0 Aug 14 14:53 1.txt

-rw-r--r--.1 root root    292 Aug 21 18:462010_8.log

-rw-r--r--.1 root root      0 Aug 21 19:17 2018.log

多行输入单行输出:

[root@linuxshell]# cat awk.txt |xargs

total 1564drwxr-xr-x. 2 root root 4096 Aug 14 14:53 1 -rw-r--r--. 1 root root 0 Aug 1414:53 1.txt -rw-r--r--. 1 root root 292 Aug 21 18:46 2010_8.log -rw-r--r--. 1root root 0 Aug 21 19:17 2018.log

-n 选项多行输出:

 [root@linux shell]# cat awk.txt |xargs -n3

total 1564drwxr-xr-x.

2 root root

4096 Aug 14

14:53 1-rw-r--r--.

1 root root

0 Aug 14

14:53 1.txt-rw-r--r--.

1 root root

292 Aug 21

18:462010_8.log

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

[root@linuxshell]# echo "Linux#PHP#Python#java" |xargs -d#

Linux PHPPython java

结合 -n 选项使用:

[root@linuxshell]# echo "Linux#PHP#Python#java" |xargs -d# -n2

Linux PHP

Python java

我们经常把find和xargs搭配使用,例如:

[root@linuxshell]# find ./ -type f -name "*.log"|xargs rm -f

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

[root@linuxshell]# find ./ -type f -name "*.log"|xargs tar -zcvf  log.tar.gz

统计一个文件目录中所有log文件的行数:

[root@linuxshell]# find ./ -type f -name "*.log"|xargs wc -l

  18 ./test/a.log

 100 ./2010_8.log

  33 ./2018.log

 151 total

使用 xargs下载所有链接:

[root@linuxshell]# cat url.txt|xargs wget -c

使用 xargs -i参数:

[root@linuxshell]# find . -name "*.log" |xargs -p -i cp {} /shell/logs

cp./test/a.log /shell/logs ?...y

cp./2010_8.log /shell/logs ?...y

cp./2018.log /shell/logs ?...y

[root@linuxshell]# cat logs

cat: logs:Is a directory

[root@linuxshell]# ls logs

2010_8.log  2018.log a.log

利用xargs关闭不常用的系统启动软件

[root@linuxshell]# chkconfig --list|egrep -v "crond|auditd|iptables|httpd"|xargs-I{} chkconfig {} off

将7天前的日志备份到特定目录,-I '{}'表示将后面命令行的{}替换成前面解析出来的参数。

root@linuxshell]# find ./ -mtime 7 | xargs -I '{}' mv {} /tmp/logs

  1. -print0:告诉find命令,在输出文件名之后,跟上NULL字符,而不是换行符;

  2. -0:告诉xargs,以NULL作为参数分隔符


[root@linuxshell]# find . -name "*.sh" -print0 | xargs -0 -t ls -al


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:花花一览,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了