您现在的位置是:首页 > 正文

linux xargs命令一(与find ls等命令组合)

2024-01-30 19:48:22阅读 0

     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

网站文章

  • centos7 防火墙设置

    centos7 防火墙设置

    centos7 防火墙设置 开启 关闭 开放端口

    2024-01-30 19:47:46
  • api-ms-win-crt-runtime-|1-1-0.dll插件丢失(64位)

    解决方法 1、所需文件:(1)api-ms-win-crt-runtime-|1-1-0.dll插件下载(64位) (2)vc_redist.x64.exe 下载链接: api-ms-win-crt-runtime-|1-1-0.dll 、vc_redist.x64.exe文件,可从本人资源中下载。2、步骤: (1)把api-ms-win-crt-runtime-|1-1-0...

    2024-01-30 19:47:39
  • AI 大模型 LLM 的基础概念、核心算法原理数学模型和发展历史及其应用领域

    文本摘要是指从大量的文本中提取关键信息,并生成简洁、易于理解的摘要。LLM能够通过对文本进行编码和自动摘要,从而提高文本摘要的质量和效率。总之,LLM是自然语言处理领域中的一个重要组成部分,它通过对大量数据进行训练,实现了自然语言理解、文本分类、机器翻译、文本摘要等多种自然语言处理任务。在未来的发展中,我们可以预见LLM将会有着更广泛的应用场景,并为人工智能技术的发展带来更大的推动力。

    2024-01-30 19:47:31
  • 什么时候可以将数字化仪用作示波器,示波器数字化仪和非示波器数字化仪有什么区别?

    什么时候可以将数字化仪用作示波器,示波器数字化仪和非示波器数字化仪有什么区别?

    Spectrum PCIe和LXI数字化仪 这是一个有趣的问题,回答它的最好方法是查阅示波器的字典定义:“用于测量电压变化的电子仪器。它在屏幕上显示电振荡的波形。” 数字转换器和适当的软件可以完成相同的操作。它获取电压波形并显示在屏幕上。...

    2024-01-30 19:47:03
  • 机器学习入门与Python实战(二):回归分析 Regression Analysis

    机器学习入门与Python实战(二):回归分析 Regression Analysis

    现实问题思考现实问题思考--体重预测身高更多因素:性别、所在城市、父母身高等现实问题思考--住宅面积预测售价更多因素:房间数量、房屋年龄、人口密度、交通便利程度等现实问题思考--细菌增长数量预测更多因...

    2024-01-30 19:46:57
  • Redis系列-JAVA与redis整合-JedisPool的使用

    JedisPoolAPI package com.jedis; import java.util.LinkedList; import java.util.List; import java.util.ResourceBundle; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; im

    2024-01-30 19:46:49
  • Java集合

    【代码】Java集合。

    2024-01-30 19:46:41
  • Redis系列——第四章 Redis发布订阅模式

    Redis系列——第四章 Redis发布订阅模式

    Redis系列 Redis系列——第一章 Redis配置文件 Redis系列——第二章 Redis数据类型以及基本使用 Redis系列——第三章 Redis开启事务并实现乐观锁 Redis系列——第四章 Redis发布订阅模式 Redis系列——第五章 Redis持久化策略RDB与AOF Redis系列——第六章 Redis主从同步 Redis系列——第七章 Redis开启哨兵模式 ...

    2024-01-30 19:46:13
  • 数字化研发项目方案(下)

    数字化研发项目方案(下)

    IETP的主要功能包括通用的人机交互界面,方便用户快速定位、浏览所需内容的导航树,提供电子技术手册图文对照浏览功能,支持语音、视频、虚拟仿真等其他多媒体格式,对于故障隔离等具有决策树支持的工作,可以通...

    2024-01-30 19:45:57
  • linux nss升级,Linux系统升级

    首先查看当前版本信息# uname -aLinux localhost.localdomain3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC ...

    2024-01-30 19:45:30