首页 > 系统相关 >Linux命令-xargs

Linux命令-xargs

时间:2024-04-06 21:23:13浏览次数:16  
标签:xargs list 命令 参数 file Linux txt

声明:本文框架和思路均参考阮一峰博客的xargs 命令教程

xargs通常用于将A命令的输出作为B命令的输入(参数),因为一些命令的参数无法使用标准输入(stdin)而只能使用命令行

对于那些可以使用stdin作为参数的命令,我们并不需要xargs,直接使用 |即可

cat /etc/shells | grep bash

而对于不支持stdin作为参数的命令,我们就不能通过|来连接,这就是xargs应用的地方了。

下面主要说明这几个参数

  • -L & -n,与分块相关
  • -p & -t,与用户交互相关
  • -d & -0,与分割符相关
  • -I,与占位符相关
  • --max-procs & -P,与并行执行相关

-L & -n

xargs默认尽可能多的将输入分割成合适大小的块,但有时候传入的参数过多会导致效率下降

注意在find . -name "*.txt" | xargs grep "abc"中,由于grep每次只能处理一个文件,故这里会逐个对每个文件进行grep
而在一些可以接收若干参数的命令中,grep就会一次性喂给其多个(在不超过其上线的情况下)

-n与-L则是针对这个问题的一种解决方案:限制每个命令行执行时传递的参数数量,以避免一次处理过多文件提高效率

其中-n是同一行中的多项,而-L则是不同行中的多项

假设file_list_lines.txt中的文件内容如下:

a.txt 
b.txt
c.txt
d.txt

cat file_list_lines.txt | xargs -L 2 rm
将file_list_lines.txt中的文件名按每2行为一组传递给rm

假设file_list_line.txt中的文件内容如下:

a.txt b.txt c.txt d.txt

cat file_list_line.txt | xargs -n 2 rm
将file_list_line.txt中的文件名按每两项为一组传递给rm

若file_list_line中有若干行,在mac中依旧可works,暂不清楚linux上

-p & -t

-p在每次执行命令之前询问用户是否继续执行

-t在执行命令之前输出要执行的命令以及要传递给该命令的参数,其主要是帮助用户了解即将执行的命令,但不会询问用户是否确认执行

-d & -0

xargs默认空格、制表符和换行符为分隔符,-d参数则可用来灵活指定分隔符,而-0参数则是指定分隔符为null字符('\0')

-d参数在mac中无法使用(似乎是由于mac上的xargs是BSD版本?)

假设file_list_line.txt中的文件内容如下:

a.txt,b.txt,c.txt,d.txt

cat file_list_line | xargs -d ',' echo

-0参数在处理包含特殊字符(如空格,而xargs默认以空格为分隔符,这就会导致一个文件名在处理时会被分成两个)的文件名时可以确保处理的正确性

-0最常是与find 命令的 -print0 选项一起使用,-print0 会以 null 字符作为分隔符来打印文件名。然后,xargs 使用 -0 选项来指定以 null 字符作为输入的分隔符,从而正确处理包含特殊字符的文件名

-I

指定一个占位符来代表从标准输入流中接收到的参数,一般用来将命令行参数传给多个命令

-I后面紧跟的就是占位符,举个例子

假设files.txt中的文件内容如下:

/home/user/file1.txt
/home/user/file2.txt
/home/user/file3.txt

这里的{}就是占位符,

cat files.txt | xargs -I {} ls -l {}

当然这里也可以用-n来实现
cat files.txt | xargs -n 1 ls -l

另一个例子就像开头那篇博文里那样,利用占位符将参数传给多个命令
cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'

这里使用单引号是为了确保整个命令被作为一个参数传递给 sh -c 命令,防止 shell 在执行之前对其中的特殊字符进行解析和扩展

--max-procs || -P

用于指定同时运行的子进程的最大数量。用于并行执行任务时,尤其是处理大量数据或者需要利用多核处理器,因为xargs命令默认只使用一个进程执行命令

cat files.txt | xargs -P 4 -I {} gzip {}
用四个进程来执行解压,提高效率

另外注意,--max-procs n 表示最多使用n个进程,而--max-procs 0 表示不限制进程数。

标签:xargs,list,命令,参数,file,Linux,txt
From: https://www.cnblogs.com/3-141592653589/p/18117955

相关文章

  • 交换机命令随笔与案例
    会员周边新闻博问AI培训云市场  注册登录微子天明 交换机命令随笔与案例12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505......
  • Linux基础 环境变量 别名 快捷键 历史命令 命令提示符
    1.##重启网卡报错[root@localhost~]#systemctlrestartnetwork 2.[root@localhost~]#[]:为了将命令提示符内容,扩进去root:当前登录系统的用户是谁@:分隔符localhost:当前服务器的主机名~:当前所在的目录(~当前登录用户的家目录)#:用户身份(#代表超级用户$代表普通用户) 3......
  • linux后台运行及任务挂后台-linux亲测有效操作001
    由于命令行耗时太久,突然想把进程挂后台走人怎么办?01前台转到后台1.输入ctrl+z将该前台任务挂起^Z[1]+StoppedXXXXXXXX2.运行jobs命令,查看任务号(可以看到run.sh对应的任务号是1)jobs-l#-l显示pid......
  • gdb基本调试命令
    基本调试命令编译程序时要加上-g,之后才能使用gdb调试:gdbhello //gdb+可执行程序break(b)10//在第10行设置断点,简写binfob //查看断点信息run(r) //运行,运行到断点停止next(n) //执行当前行语句print(p)//显示变量的值continue(c)//继续运行程序,直到......
  • python 在命令行中选择文件路径的交互程序
    直接上代码,懒得多说1importcolorama2colorama.init()3fromcoloramaimportFore,Back,Style4importos5importre67class路径选择器:8def__init__(self):9当前路径=''10选择集=[]11路径深度......
  • npm常用的命令
    npm英文全称:nodepackagemanager。npm是JavaScript编程语言的包管理器。npm允许开发人员通过管理项目的依赖关系来轻松地共享和重用代码。在JavaScript社区中广泛使用,它提供了用于安装、管理和更新包等常用的命令。常见的npm命令有:1.初始化一个新的npm包,生成一个`package.js......
  • Linux的学习之路:4、权限
    一、Linux权限的概念权限我们都熟悉,最常见的就是在看电视时需要vip这个就是权限,然后在Linux就是有两个权限,就是管理员也就是超级用户和普通的用户命令:su[用户名]功能:切换用户。例如,要从root用户切换到普通用户user,则使用suuser。要从普通用户user切换到root用户则使......
  • [转帖]docker输入多行命令
    docker相关学习资料下载地址: docker相关资料合集Docker输入多行命令在使用Docker进行容器管理时,我们经常需要在容器内部执行多行命令。本文将介绍Docker中输入多行命令的几种方式,并提供相应的代码示例。1.使用Shell的行连字符在Docker中,我们可以使用Shell的行连字......
  • [转帖]【Linux】使用 apt-get 查询并安装指定版本的软件
    https://zhuanlan.zhihu.com/p/540712989 一、通过apt-get安装指定版本的软件$sudoapt-getinstallpackage=versionversion是软件版本号,package是要安装的软件二、查询指定软件有多少个版本1、通过网站搜索https://packages.ubuntu.com/2、使用apt-cachem......
  • JetBrains IDE 2024.1 (macOS, Linux, Windows) 发版 - 开发者工具
    JetBrainsIDE2024.1(macOS,Linux,Windows)-开发者工具CLion,DataGrip,DataSpell,Fleet,GoLand,IntelliJIDEA,PhpStorm,PyCharm,Rider,RubyMine,WebStorm请访问原文链接:JetBrainsIDE2024.1(macOS,Linux,Windows)-开发者工具,查看最新版。原创作品,转载请......