Linux基础: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.io/linux-learning-wiki/content/xargs.html
http://wiki.jikexueyuan.com/project/shell-learning/xargs.html
Linux基础:xargs命令的更多相关文章
- Linux学习笔记(9)linux网络管理与配置之一——Linux基础网络命令与学习大纲(0)
大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配置DNS客户端 4.配置名称解析顺序 5.配置路由与默认网关 6.双网卡绑定 [1] ping [2]net ...
- linux下xargs命令用法详解 【转】
转自:http://blog.chinaunix.net/uid-128922-id-289992.html xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xa ...
- linux下xargs命令用法详解
原文:http://blog.chinaunix.net/uid-128922-id-289992.html xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xa ...
- 转 linux下xargs命令用法详解
xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤 ...
- Linux下xargs命令详解及xargs与管道的区别
在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别.为什么要用xarg ...
- Linux基础常用命令大全学习
1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...
- Linux基础入门级命令文档
Linux系统上命令的使用格式,及常用命令示例 1.命令提示符 登录系统后,第一眼看到的内容是: [root@node01 ~]# 上图就是 Linux 系统的命令提示符.那么,这个提示符的含义是什么 ...
- 【转】【Linux】linux下xargs命令
xargs命令xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数.xa ...
- Linux中 xargs 命令用法
xargs命令: xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具. 1.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令 ...
- Linux 下 xargs 命令
xargs 常常被大家忽略的一个命令,对它的一些用法很多人可能不熟悉,其实它是一个功能强大的命令,特别是在结合管道进行批量处理方面 语法 xargs 语法格式如下 xargs [OPTION]... ...
随机推荐
- javaScript函数提升及作用域
代码片段: var a = 1; function foo() { console.log(a); //输出为undefined if (!a) { var a = 2; } alert(a); }; ...
- Array类的Sort()方法
刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享. Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System. ...
- 解决webstorm启动索引文件卡死问题
问题 当目录下的文件数量较大时,用webstorm打开会出现卡顿,甚至卡死现象,例如:node_modules目录 解决方案 不让webstorm索引该目录下的文件步骤:1.node_modules目 ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- Liunx vi编辑器一些指令
最近几天学习了Liunx vi编辑器 的使用,感觉还比较容易.总结的一点心得: vi分为3个模式,命令模式,尾行模式,编辑模式. 1. 命令模式 与 编辑模式切换 a:光标向后移动一位进入编辑模式 i ...
- 基于MyBatis的数据服务接口
背景 作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分.因为其重要性围绕着数据操作也出现了众多框架.成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和 ...
- jenkins~管道Pipeline的使用,再见jenkinsUI
Pipeline在Jenkins里的作用 最近一直在使用jenkins进行自动化部署的工作,开始觉得很爽,省去了很多重复的工作,它帮助我自动拉服务器的代码,自动还原包包,自动编译项目,自动发布项目,自 ...
- idea for Mac 日常配置&快捷键
配置: 1.jdk:file > project structure -- Project SDK; 快捷键: geter adn seter :command+n command+点到具体方法 ...
- HTML基础上
知识点一:HTML Hyper Text Markup Language 超文本标记语言. HTML标准结构: < ! doctype html> 声明文档类型 <html> ...
- Unity塔防游戏开发
Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...