shell学习四十五天----xargs

执行命令:xargs

当find产生一个文件列表时,该列表提供给另一个命令有时是很有用的.

案例:

$touch abc.c erd.c oiy.c

$ll

./erd.c

./abc.c

./oiy.c

$find -name ‘*.c‘| rm

rm: 缺少操作数

请尝试执行"rm --help"来获取更多信息。

$find -name ‘*.c‘| xargs rm

$find -name ‘*.c‘

无任何显示,说明已成功删除.

1.简介,之所以能用到这个命令,关键是由于很多命令不支持管道(|)来传递参数,而日常工作中有这个必要,所以就有了xargs 命令,如上例.

xargs可以读入stdin的资料,并且以空白子元或断行子元作为分辨,将stdin的资料分隔成为atguments,因为是以空白子元作为分隔,所以,如果有一些文件名或者其他有意义的名词内含空白子元的时候,xargs就可能会出现误判了.

$touch ‘file 1.log‘ ‘file 2.log’

$ll

总用量 0

-rw-r--r-- 1 root root 0 7月  13 10:18 file 1.log

-rw-r--r-- 1 root root 0 7月  13 10:18 file 2.log

$find -name ‘*.log‘

./file 2.log

./file 1.log

$find -name ‘*.log‘ | xargs rm

rm: 无法删除"./file": 没有那个文件或目录

rm: 无法删除"2.log": 没有那个文件或目录

rm: 无法删除"./file": 没有那个文件或目录

rm: 无法删除"1.log": 没有那个文件或目录

原因很简单,xargs默认是以空白字符(空格,tab,换行符)来分割记录的,因此文件名 ./file 1.log被解释成了两个记录./file和1.log,不幸的是rm找不到这两个文件.

为了解决此类问题,聪明的人类想出了一个办法,让find在打印出一个文件名之后接着输出一个null字符(‘ ’)而不是换行符,然后再告诉xargs也用null字符来作为记录的分隔符,这就是find的-print和xargs的-0选项.

$find -name ‘*.log‘ -print0 | xargs -0 rm

2.主要选项


选项


含义


-0


当stdin含有特殊子元的时候,将其当成一般字符


-a file


从文件中读入作为stdin


-e flag


注意有的时候可能会是-E,flag必须是一个以空格分割的标志,当xargs分析到含有flag这个标志的时候就停止


-p


当每次执行一个argument的时候咨询问一次用户.


-n num


后面加次数,表示命令在执行的时候一次用arguments的个数,默认是用所有的.


-t


便是先打印命令,然后在执行


-i


或者是-I,将xargs的每项名称,一般是一行一行的赋值给{},可以用{}代替


-r no-run-if-enpty


当xargs的输入为空的时候则停止xargs,不用再去执行了


-s num


命令行的最大字符数


-d delim


分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符


-x


exit的意思,主要是匹配-s使用


-P


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

find -print和-print0的区别:

-print每一个输出后会添加一个回车换行符,而-print0则不会.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 10:17:30

shell学习四十五天----xargs的相关文章

shell学习四十九天----进程建立

进程 前言:进程指的是运行中程序的一个实例.新进程由fork()与execve()等系统调用所起始,然后运行,知道他们下达exit()系统调用为止. linux系统都支持多进程.尽管计算机看起来像是一次做了非常多事,但除非是他拥有多个CPU,否则一次做了好多事仅仅是个错觉.其实,每一个进程仅容许在一个极短的期间运行,我们称为时间片段,之后进程会先临时搁置,让其它等待中进程运行.时间片段极短,通常仅仅有几微妙,所以人们非常少感觉到进程将控制权交回内核,再交给还有一个进程的这样的文本切换.进程本身不

shell学习四十天----awk的惊人表现

awk的惊人表现 awk可以胜任几乎所有的文本处理工作. awk 调用 1.调用awk: 方式一:命令行方式 awk [-F field-separator ] 'commands' input-file(s) [ -F域分隔符 ]是可选的,因为awk使用空格作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,如果要浏览例如passwd文件.此文件名域以冒号作为分隔符,则必须指明-F选项,如: awk -F 'commands' input-file 方式二:将所有awk命令插

学习四十五

十二周三次课 (4月25日)12.10 Nginx访问日志12.11 Nginx日志切割12.12 静态文件不记录日志和过期时间 Nginx访问日志 日志格式vim /usr/local/nginx/conf/nginx.conf //搜索log_format除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加access_log /tmp/1.log combined_realip;这里的combined_realip就是在nginx.conf中定义的日志格式名

shell学习三十五天----波浪号展开与通配符

波浪号展开与通配符 shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量)的值里任何未被引号括起来的冒号之后的第一个字符为波浪号(~)时,shell变回执行波浪号展开. 波浪号展开的目的,将用户根目录的符号型表示方式,改为实际的目录路径.可以采用直接或间接的方式指定执行此程序的用户,如未明白指定,则为当前的用户: 命令:vi ~/.profile       与vi $

shell学习四十六天----文件系统的空间信息df和du命令

文件系统的空间信息 df命令 df命令提供单行摘要,一行显示一个加载的问价系统的已使用的和可用的空间.其单位视系统而定,有些使用块,有些则是KB.大部分现代实现都支持-k选项,也就是强制使用KB单位,以及-l(小写字母L)选项,仅显示本地文件系统,排除网络加载的文件系统. df命令详解 语法: df [选项] [文件或目录] 用途: 显示一个或多个文件系统内部的inode或空间使用情况 主要选项: -i 显示inode技术,而非空间 -k 显示空间时,以KB为单位,而非块 -l 小写L,仅显示本

【Unity 3D】学习笔记四十五:游戏实例——击垮围墙

用这个游戏实例来总结之前我们复习的所有关于物理引擎的知识.在游戏中,发送一个球形的炮弹来击垮前面的墙.给炮弹与墙都添加了刚体组件,给炮弹绑定了粒子系统,并且在炮弹的粒子动画中添加了5组不同的颜色,显示移动轨迹. using UnityEngine; using System.Collections; public class Script_06_14 : MonoBehaviour { //炮弹对象 private GameObject obj; //准心贴图 public Texture te

javascript基础学习(十五)

javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的secure 一.cookie介绍 cookie实际上就是一些信息,这些信息以文件的形式存储在客户端计算机上.在javascript中,cookie主要用来保存状态,或用于识别身份. 二.创建与获取cookie 创建cookie的语法代码如下所示:document.cookie="name=value&q

laravel3学习笔记(十五)

原作者博客:ieqi.net ==================================================================================================== 异常与日志 在应用中,我们总会遇到各种问题.各种异常,这时,记录异常发生时的状态就很重要,所以异常与日志是有着天然的关系的. 关于异常与日志的配置在文件 application/config/error.php 中. 文件中有四个配置项: 'ignore' => ar

第四十五章

第四十五章1 老子是在教导我们不追求完美吗? 大成若缺,其用不弊 最完美的东西,好似有残缺一样,但它的作用永远不会衰竭. 做事忘记结果,才能更坦然. 各位朋友大家好,今天我们接着来讲<道德经>,来听听老子老先生给我们带来什么样的人生启发.今天我们来到了第四十五章的讲解. 时光过的非常快,从我去年开始讲到现在,已经讲了二百多期,已经第四十五章了,<道德经>共八十一章,我们讲了一半出头了,这时间还是比较快的.有很多朋友听完以后觉得特别开心,心里不纠结了,我看到这样的留言我很开心.有人说