Linux基础之xargs命令的入门实例

作者:程序猿小卡_casper 时间:2023-10-10 20:13:54 

简介

xargs命令有两个要点。第一,你必须列出目标文件。第二,你必须指定对每个文件需要执行的命令或脚本。

xargs命令被用来处理分布在不同目录下的文件:

  • 计算所有文件的行数

  • 打印指定文件的第一行

  • 对每个文件执行一个自定义脚本

xargs可以将输入内容(通常通过命令行管道传递),转成后续命令的参数,通常用途有:

  • 命令组合:尤其是一些命令不支持管道输入,比如ls。

  • 避免参数过长:xargs可以通过-nx来将参数分组,避免参数过长。

使用语法如下


Usage: xargs [OPTION]... COMMAND INITIAL-ARGS...
Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.

入门例子

首先,创建测试文件


touch a.js b.js c.js

接着,运行如下命令:


ls *.js | xargs ls -al

输出如下:


-rw-r--r-- 1 a wheel 0 12 18 16:18 a.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 b.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 c.js

命令解释:

  • 首先,ls *.js的输出为a.js b.js c.js。

  • 通过管道,将a.js b.js c.js作为xargs的输入参数。

  • xargs命令收到输入参数后,对参数进行解析,以空格/换行作为分隔符,拆分成多个参数,这里变成a.js、b.js、c.js。

  • xargs将拆分后的参数,传递给后续的命令,作为后续命令的参数,也就是说,组成这样的命令ls -al a.js b.js c.js。

可以加上-t参数,在执行后面的命令前,先将命令打印出来。


ls *.js | xargs -t ls -al

输出如下,可以看到多了一行内容ls -al a.js b.js c.js,这就是实际运行的命令。


ls -al a.js b.js c.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 a.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 b.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 c.js

例子:参数替换

有的时候,我们需要用到原始的参数,可以通过参数-i或-I实现。参数说明如下


-I R  same as --replace=R (R must be specified)
-i,--replace=[R] Replace R in initial arguments with names
 read from standard input. If R is
 unspecified, assume {}

例子如下,将所有的.js结尾的文件,都加上.backup后缀。-I '{}'表示将后面命令行的{}替换成前面解析出来的参数。


ls *.js | xargs -t -I '{}' mv {} {}.backup

展开后的命令如下:


mv a.js a.js.backup
mv b.js b.js.backup
mv c.js c.js.backup

例子:参数分组

命令行对参数最大长度有限制,xargs通过-nx对参数进行分组来解决这个问题。

首先,创建4个文件用来做实验。


touch a.js b.js c.js d.js

然后运行如下命令:


ls *.js | xargs -t -n2 ls -al

输出如下,-n2表示,将参数以2个为一组,传给后面的命令。


ls -al a.js b.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 a.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 b.js
ls -al c.js d.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 c.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 d.js

例子:特殊文件名

有的时候,文件名可能存在特殊字符,比如下面的文件名中存在空格。


touch 'hello 01.css' 'hello 02.css'

运行之前的命令会报错,因为xargs是以空格/换行作为分隔符,于是就会出现预期之外的行为。


# 命令
find . -name '*.css' | xargs -t ls -al
#输出
ls -al ./hello 01.css ./hello 02.css # 展开后的命令
ls: cannot access ./hello: No such file or directory
ls: cannot access 01.css: No such file or directory
ls: cannot access ./hello: No such file or directory
ls: cannot access 02.css: No such file or directory

xargs是这样解决这个问题的。

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

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


find . -name '*.css' -print0 | xargs -0 -t ls -al

例子:日志备份

将7天前的日志备份到特定目录


find . -mtime +7 | xargs -I '{}' mv {} /tmp/otc-svr-logs/

总结

相关链接

https://craftsmanbai.gitbooks...

http://wiki.jikexueyuan.com/p...

来源:https://segmentfault.com/a/1190000012566053

标签:linux,xargs命令,入门
0
投稿

猜你喜欢

  • 只要坚持,我们就会有可能看到希望

    2007-12-25 12:37:00
  • 百度联盟:如何匹配相关度高的推广信息

    2009-04-14 10:25:00
  • web2.0拼客 爱拼才会省

    2007-10-12 13:05:00
  • Linux防火墙iptables入门教程

    2022-05-07 17:57:25
  • WordPress添加评论链接跳转

    2011-09-19 13:01:12
  • Linux watch命令的使用

    2023-11-03 03:44:18
  • Twitter发展史:从纸上创意到10亿美元估值

    2009-10-09 09:10:00
  • Linux(RH9)下安装apache和subversion 方法

    2010-05-02 17:53:00
  • Linux下安装jdk1.8并配置环境变量的教程

    2023-06-14 18:43:27
  • 心情文字:阳光总在风雨后

    2008-04-07 13:21:00
  • 杨帆:SEO也是一门艺术

    2007-09-28 18:50:00
  • 为什么你的网站98%的访客都流失了?

    2011-04-18 12:40:00
  • 孙峥:网站优化时Description的书写秘诀

    2007-09-23 13:51:00
  • Solaris 架设FTP虚拟系统

    2009-12-22 18:54:00
  • 五款主流ARP防火墙评测 拦截性能大比拼!

    2010-02-21 12:47:00
  • 百度优化VS谷歌优化 浅谈针对优化差异性

    2009-03-13 15:16:00
  • 做点击站必看的相关外语

    2008-07-24 12:26:00
  • Ubuntu VMware出现提示No 3D support is available的解决方法

    2023-01-23 06:48:06
  • 个人站长打造网站心态之路

    2008-03-24 19:31:00
  • 解决VMware仅主机模式虚拟机无法ping通物理机问题

    2021-01-31 23:50:31
  • asp之家 网站运营 m.aspxhome.com