linux xargs命令一(与find ls等命令组合)(转)
-p 操作具有可交互性,每次执行comand都交互式提示用户选择
-i -i 选项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准
-I
格式: xargs -I rep-str comand rep-srt rep-str 为代替传递给xargs参数, 可以使 {} $ @ 等符号 ,其主要作用是当xargs command 后有多个参数时,调整参数位置。例如:
find . -name "*.txt " |xargs -I {} cp {} /tmp
---------------------
作者:千年的塔
来源:CSDN
原文:https://blog.csdn.net/hittata/article/details/8021500
版权声明:本文为博主原创文章,转载请附上博文链接!
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
xargs [-0prtx] [-E eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
[-d delimiter] [--delimiter delimiter] [-I replace-str] [-i[replace-
str]] [--replace[=replace-str]] [-l[max-lines]] [-L max-lines]
[--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s max-
chars] [--max-chars=max-chars] [-P max-procs] [--max-procs=max-procs]
[--interactive] [--verbose] [--exit] [--no-run-if-empty]
[--arg-file=file] [--show-limits] [--version] [--help] [command
[initial-arguments]]
最经典应用模式: somecommand |xargs -item command
不带command ,默认的使用echo 输出
[root@auc-test2 log]# find ./eccs/ -name "*2" |xargs
./eccs/eccs.log.2 ./eccs/eccs.log.12
用途:
1.构造参数列表并运行命令,即将接收的参数传递给后面的command 命令执行
2.将多行输入转换为单行 (特殊功效)
优点:
1. 将输入参数整理后,去除<newline>换行符,以一个列表形式处理
2. 避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用
XARGS 一般是和管道一起使用:
XXcomand | xargs -x comand initial-args
-x 代表选项
选项:
-p 操作具有可交互性,每次执行comand都交互式提示用户选择
-i 选项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准
-I 格式: xargs -I rep-str comand rep-srt rep-str 为代替传递给xargs参数, 可以使 {} $ @ 等符号 ,其主要作用是当xargs command 后有多个参数时,调整参数位置。例如:
find . -name "*.txt " |xargs -I {} cp {} /tmp
[root@eccs_web client]# find ./ -name '*.doc' | xargs -I {} cp {} /hu
等价于
[root@eccs_web client]# find ./ -name '*.doc' | xargs -i cp {} /hu
-t 启用命令行输出模式:其先回显要运行的命令,然后执行命令,打印出命令结果,跟踪与调试xargs的利器,也是研究xargs运行原理的好办法;
[root@auc-test2 log]# find ./eccs/ -name "*2" |xargs -t ls -l
ls -l ./eccs/eccs.log.2 ./eccs/eccs.log.12
-rw-r--r-- 1 root root 10485916 12月 17 17:34 ./eccs/eccs.log.12
-rw-r--r-- 1 root root 10485807 12月 18 12:08 ./eccs/eccs.log.2
-r 如果没有要处理的参数传递给xargs 默认是带 空参数运行一次,如果你希望无参数时,停止 xargs,直接退出,使用 -r 选项即可,其可以防止xargs 后面命令带空参数运行报错。If the standard input does not contain any nonblanks, do not run the command, exit
-s size
设置每次构造Command行的长度总大小,包括 command +init-param +传递参数,Size 参数必须是正整数
-L num
从标准输入一次读取num行送给Command命令 ,-l和-L功能一样,不建议使用。
-n
xargs 的-n选项设置每次送给command命令的参数个数,参数以空白字符或<newline>换行符分割
-L 和 -n 标志是互相排斥的;最后指定的标志生效。
-x 如果有任何 Command 行大于 -s Size 标志指定的字节数,停止运行 xargs 命令,-L -I -n 默认打开-x参数
常见的经典用法:
find . -name "*.txt" |xargs rm {}
-n num 控制每次输入的参数个数
假设你希望使用 rm 命令(该命令将作为 xargs 命令的参数)删除文件。然而,rm 只能接受有限数量的参数。如果你的参数列表超出该限制怎么办?xargs 的 -n 选项限制单个命令行的参数个数。
写道
[root@andes.com ~/tmp/dir]#ls
data.txt d.txt env2.txt env.txt export2.txt export.txt fuck.txt set.txt s.txt t.txt
[root@andes.com ~/tmp/dir]#ls |xargs -t -n 2 file
file data.txt d.txt
data.txt: ISO-8859 text
d.txt: ISO-8859 text
file env2.txt env.txt
env2.txt: ASCII text, with very long lines
env.txt: ASCII text, with very long lines
file export2.txt export.txt
export2.txt: ASCII text, with very long lines
export.txt: ASCII text, with very long lines
file fuck.txt set.txt
fuck.txt: ASCII text
set.txt: ASCII text, with very long lines
file s.txt t.txt
s.txt: ASCII text
t.txt: ASCII text
[root@andes.com ~/tmp/dir]#
找出所有的2结尾的文件,并将其归档。
[root@auc-test2 eccs]# find . -name "*2" | xargs -t tar -zcvf log2.tgz
tar -zcvf log2.tgz ./eccs.log.2 ./eccs.log.12
./eccs.log.2
./eccs.log.12
将所有的jpg图片文件复制到外置的硬盘中
# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
使用该方法,你能快速重命名目录中的文件。
例3:
[root@eccs_web client]# ls | xargs -t -i mv {} {}.bak
mv abc.doc abc.doc.bak
mv imag2e.tgz imag2e.tgz.bak
-i 选项告诉 xargs 用每项的名称替换 {}。-t 选项指示 xargs 先打印命令,然后再执行。
删除数量比较多的文件
[root@eccs_web client]# ls | xargs -n 20 -t rm -rf
rm -rf abc.doc.bak imag2e.tgz.bak
ls当然是输出所有的文件名(用空格分割)
xargs就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数
也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了
删除某个目录下,所有.bak后缀的文件:
# find . -name '*.bak' | xargs rm -f
备注:find命令查找出符合条件的文件,xargs命令,将find找到的每一个文件,作为参数,传给rm命令进行处理。
查找所有有引用SimpleDateFormat这个类的java文件:
# find . -name '*.java' | xargs grep SimpleDateFormat
---------------------
作者:胖鹅68
来源:CSDN
原文:https://blog.csdn.net/hbiao68/article/details/52682979
版权声明:本文为博主原创文章,转载请附上博文链接!
linux xargs命令一(与find ls等命令组合)(转)的更多相关文章
- 每天一个 Linux 命令(21):find命令之xargs
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...
- Linux命令详解之–ls命令
今天开始为大家介绍下Linux中常用的命令,首先给大家介绍下Linux中使用频率最高的命令--ls命令. 更多Linux命令详情请看:Linux命令速查手册 linux ls命令用于显示指定工作目录下 ...
- 每天一个Linux命令(01)--ls命令
ls命令是Linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单.通过ls命令不仅可以查看Linux文件 ...
- linux xargs 命令详解
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...
- linux学习笔记命令篇1---命令ls
前言: linux中接触最多的就是命令和文件. 命令 命令是有其格式的, 一般格式是command [option] parameter1 parameter2 [paramete3 ...]: 注 ...
- Linux xargs 命令
xargs xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具. xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据. xargs 也可 ...
- linux在home目录下使用ls命令卡死
linux在home目录下使用ls命令卡死,原因可能是mount的某个服务器挂掉或出啥问题了,这个时候umount掉就正常了,如果umount提示device is busy,这时可以使用强制卸载 ...
- Linux xargs命令
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...
- 实现Linux下的ls -l命令
基本实现了Linux下的ls -l命令,对于不同的文件显示不同的颜色和显示符号链接暂时没有实现: /************************************************** ...
随机推荐
- wpf tabcontrol内的datagrid的selectionChanged事件向往传递问题
tabcontrol 内的一个tabitem里是datagrid 当程序相应datagrid的selectionchanged事件后会向上传递到tabcontrol的selectionchanged事 ...
- Perl 条件语句
Perl 条件语句 Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: 注意,数字 0, 字符串 '0' . & ...
- css清除浮动的几种方法
推荐几种好用的清除浮动方法: 方法1: .clearfix:after { content:"."; display:block; height:; clear:both; vis ...
- GdiPlus 一个给 Delphi 提供的新的 GDI+ 接口很好用!
尽管 GDI+ 已经有近 10 年的历史(随 Win2000 推出), 尽管 DirectX 如日中天, 但在 Windows 7 之前的版本下进行 2D 绘图还是离不开它, 微软也没有停止对它的升级 ...
- ETL详解
ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...
- ftp和ssh登录缓慢的解决办法
在垃圾邮件和短信盛行的今天,邮件和短信,拦截与反向域名解析的方式,有效的防止了垃圾短信.邮件的入侵.Vsfpd和sshd同样利用了反向域名解析这一功能(默认开启),.在客户端向server端请求访问时 ...
- JVM内核-原理、诊断与优化学习笔记(八):JAVA堆分析
文章目录 内存溢出(OOM)的原因 在JVM中,有哪些内存区间? 堆溢出 永久区 Java栈溢出 直接内存溢出 小问题? MAT使用基础 柱状图显示 支配树 显示线程信息 显示堆总体信息,比如消耗最大 ...
- linux下使用scp在服务器之间拷贝文件 (转载)
CentOS, 本地服务器,ip: 192.168.1.111Ubuntu, 远程服务器,ip: 192.168.1.112 1.拷贝远程服务器的目录到本地服务器远程服务器192.168.1.112上 ...
- redis 体系结构
程序strings key-value 类型 ,value不仅是String,也可以是数字.使用strings 类型可以完全实现目前 Memcache 的功能,并且效率更高,还可以享受redis的 ...
- 【数论】[SDOI2010]古代猪文
大概就是求这个: $$G^\sum_{k|N} C_{n}^{k}$$ 显然只要把后面的$\sum_{k|N}C_{n}^{k}$求出来就好了 几个要用的定理: 欧拉定理的推论:(a和n互质) $$a ...