linux系统中xargs命令的使用方式

简介:

xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数,默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行,不过通过 xargs 的处理,换行将被空格取代。
如何使用xargs命令
语法:

xargs [OPTIONS] [COMMAND [initial-arguments]]
举一个例子:我们用管道符传输到xargs,并为每个参数运行touch命令,-t表示在执行之前先打印,创建三个文件:

[root@localhost ~]# echo "file1 file2 file3"|xargs -t touch
touch file1 file2 file3
如何限制参数的数量
默认情况下,传递给命令的参数数量由系统限制决定。-n选项指定要传递给命令的参数个数。xargs根据需要多次运行指定的命令,直到所有参数都用完为止。

下面例子指定每次传递一个参数:

[root@localhost ~]# echo "file1 file2 file3"|xargs -n1 -t touch
touch file1
touch file2
touch file3
如何运行多个命令
要使用xargs运行多个命令,请使用-i或者-I选项。在-i或者-I后面自定义一个传递参数符号,所有匹配的项都会替换为传递给xargs的参数。

下面例子时xargs运行两条命令,先touch创建文件,然后ls列出来:

[root@localhost ~]# echo "file1 file2 file3"|xargs -t -I % sh -c 'touch %;ls -l %'
sh -c touch file1 file2 file3;ls -l file1 file2 file3
-rw-r--r--. 1 root root 0 Jan 30 00:18 file1
-rw-r--r--. 1 root root 0 Jan 30 00:18 file2
-rw-r--r--. 1 root root 0 Jan 30 00:18 file3
如何指定一个分隔符
使用-d或者--delimiter选项设置自定义分隔符,可以是单个字符,也可以是以 开头的转义字符。

下面例子使用#做分隔符,echo命令使用了-n选项,意思是不输出新行:

[root@localhost ~]# echo -n file1#file2#file3#file4|xargs -d # -t touch
touch file1 file2 file3 file4
如何从文件中读取条目
xargs命令还可以从文件读取条目,而不是从标准输入读取条目。使用-a选项,后跟文件名。
创建一个ip.txt的文件,一会使用xargs命令ping里面的每一个地址:

[root@localhost ~]# cat ip.txt
114.114.114.114
www.linuxprobe.com
202.102.128.68
使用-L 1选项,该选项表示xargs一次读取一行。如果省略此选项,xargs将把所有ip传递给一个ping命令。

[root@localhost ~]# xargs -a ip.txt -t -L 1 ping -c 1
ping -c 1 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=93 time=11.0 ms

--- 114.114.114.114 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.026/11.026/11.026/0.000 ms
ping -c 1 www.linuxprobe.com
PING www.linuxprobe.com.w.kunlunno.com (221.15.65.202) 56(84) bytes of data.
64 bytes from hn.kd.jz.adsl (221.15.65.202): icmp_seq=1 ttl=48 time=20.9 ms

--- www.linuxprobe.com.w.kunlunno.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.934/20.934/20.934/0.000 ms
ping -c 1 202.102.128.68
PING 202.102.128.68 (202.102.128.68) 56(84) bytes of data.
64 bytes from 202.102.128.68: icmp_seq=1 ttl=83 time=8.71 ms

--- 202.102.128.68 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.710/8.710/8.710/0.000 ms
xargs与find一起使用
xargs通常与find命令结合使用。您可以使用find搜索特定文件,然后使用xargs对这些文件执行操作。

若要避免包含换行符或其他特殊字符的文件名出现问题,请始终使用find的-print0选项,这样可以使find打印完整的文件名,配合xargs命令使用-0或者--null选项可以正确的解释。

下面例子中,查找log文件夹下面的类型为file的所有文件,打包压缩起来:

[root@localhost ~]# find log/ -type f -print0|xargs --null tar -zcvf logs.tar.gz
log/anaconda/anaconda.log
log/anaconda/syslog
log/anaconda/program.log
log/anaconda/packaging.log
log/anaconda/storage.log
log/anaconda/ifcfg.log
log/anaconda/ks-script-TOLvJc.log
log/anaconda/ks-script-VRY9yQ.log
log/anaconda/ks-script-pjDijm.log
log/anaconda/journal.log
log/audit/audit.log
log/boot.log
log/boot.log-20200126
log/btmp
log/btmp-20200126

[root@localhost ~]# ll
total 604
-rw-------. 1 root root 1285 Dec 21 17:19 anaconda-ks.cfg
drwxr-xr-x. 8 root root 4096 Jan 29 23:02 log
-rw-r--r--. 1 root root 607566 Jan 30 00:58 logs.tar.gz
总结
之所以能用到这个命令,关键是由于很多命令不支持管道符来传递参数,xargs可以解决这个问题,而且使用起来很方便,跟能强大。

相关文章
|
23天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
52 8
|
6天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
32 14
Linux 10 个“who”命令示例
|
22天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
106 48
|
15天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
30 9
|
13天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
18天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
15 3
|
19天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
59 3
|
23天前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
39 4
|
22天前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
25 1
|
22天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
41 1