Xargs命令用法及参数(linux shell xargs怎么用)

2023-11-25 02:20:08 :36

xargs命令用法及参数(linux shell xargs怎么用)

大家好,如果您还对xargs命令用法及参数不太了解,没有关系,今天就由本站为大家分享xargs命令用法及参数的知识,包括linux shell xargs怎么用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

linux shell xargs怎么用

xargs命令一般后面接另一个命令,它的作用是产生后面那个命令的参数。xargs读入标准输入(一般是管道)的数据,以空格符作为分割,将标准输入的数据分割成参数,并用参数去调用后面跟的那个命令。xargs的最主要应用场景是用于一些不支持管道的命令,还有根据某个文件的数据作为某个命令的参数这样的场景。例如这样的命令:find /home -user myusername |ls -l因为ls并不是支持管道的命令,所以这条命令的结果不会是正确的结果,所以这时可以这样使用xargs:find /home -user myusername |xargs ls -l

xargs命令详解

xargs与管道有些类似,下面举例来详细讲一下两者单区别: 输出: 使用xargs命令: 输出: 可以看到 echo ’--help’ | cat 该命令输出的是echo的内容,也就是说将echo的内容当作cat处理的文件内容了,实际上就是echo命令的输出通过管道定向到cat的输入了。然后cat从其标准输入中读取待处理的文本内容。这等价于在test.txt文件中有一行字符 ’--help’ 然后运行 cat test.txt 的效果。 而 echo ’--help’ | xargs cat 等价于 cat --help 。什么意思呢,就是xargs将其接受的字符串 --help 做成cat的一个命令参数来运行cat命令,同样 echo ’test.c test.cpp’ | xargs cat 等价于 cat test.c test.cpp 此时会将test.c和test.cpp的内容都显示出来。 echo ’11@22@33’ | xargs -d ’@’ echo 输出: 11 22 33 指定以@符号分割参数,所以等价于 echo 11 22 33 相当于给echo传递了3个参数,分别是11、22、33 echo ’11@22@33@44@55@66@77@88@99@00’ | xargs -d ’@’ -n 3 echo 输出结果: 11 22 33 44 55 66 77 88 99 00 等价于: echo 11 22 33 echo 44 55 66 echo 77 88 99 echo 00 实际上运行了4次,每次传递3个参数,最后还剩一个,就直接传递一个参数。 可以看到正常情况下有3个命令行参数 11、22、33 由于使用了-E ’33’ 表示在将命令行参数 33 之前的参数传递给执行的命令,33本身不传递。等价于 echo 11 22 这里-E实际上有搜索的作用,表示只取xargs读到的命令行参数前面的某些部分给命令执行。 注意:-E只有在xargs不指定-d的时候有效,如果指定了-d则不起作用,而不管-d指定的是什么字符,空格也不行。 echo ’11 22 33’ | xargs -d ’ ’ -E ’33’ echo =》 输出 11 22 33 echo ’11@22@33@44@55@66@77@88@99@00 aa 33 bb’ | xargs -E ’33’ -d ’@’ -p echo =》 输出 11 22 33 44 55 66 77 88 99 00 aa 33 bb find . -name "*.txt" 输出: ./2.txt ./3.txt ./1.txt =》 默认情况下find的输出结果是每条记录后面加上换行,也就是每条记录是一个新行 find . -name "*.txt" -print0 输出: ./2.txt./3.txt./1.txt =》 加上 -print0 参数表示find输出的每条结果后面加上 ’\0’ 而不是换行 find . -name "*.txt" -print0 | xargs -0 echo 输出: ./2.txt ./3.txt ./1.txt find . -name "*.txt" -print0 | xargs -d ’\0’ echo 输出: ./2.txt ./3.txt ./1.txt xargs的 -0 和 -d ’\0’ 表示其从标准输入中读取的内容使用 ’\0’ 来分割,由于 find 的结果是使用 ’\0’ 分隔的,所以xargs使用 ’\0’ 将 find的结果分隔之后得到3个参数: ./2.txt ./3.txt ./1.txt 注意中间是有空格的。上面的结果就等价于 echo ./2.txt ./3.txt ./1.txt 实际上使用xargs默认的空白分隔符也是可以的 find . -name "*.txt" | xargs echo 因为换行符也是xargs的默认空白符的一种。find命令如果不加-print0其搜索结果的每一条字符串后面实际上是加了换行

xargs这个命令,很奇葩,谁可以使用正常人可以理解的文字表述下这个命令的用法呢

题主你好,

上图是截自xargs的帮助页面, 从中可知:

xargs的作用是: 从标准输入构建并执行命令行

xargs的语法: xargs

-----

上面这么说还是不好理解,举个例子来说xargs的用法:

0-9共10栋房子 | xargs 查看

对于上面这个例子来说:

"0-9这10栋房子"就是上面xargs的作用中说的"标准输入"

"查看"就是上面xargs作用中说的"命令"

而xargs命令在这里的作用就是把0-9这10栋房子分别送给"查看"命令作为参数, 并执行命令,也就是说, "0-9共10栋房子 | xargs 查看"等价于:

先将0栋房子给"查看"命令, 然后执行"查看 0栋房子"这个完整的命令;

再将1栋房子给"查看"命令, 然后执行"查看 1栋房子"这个完整的命令;

. . .

最后将第9栋房子给"查看"命令,然后执行"查看 9栋房子"这个完整的命令;

但是, 我们可以发现, "标准输入"中过来的参数,被作为"查看"命令的最后一个参数了. 但是有些情况比较复杂, 希望"标准输入"中过来的数据作为命令的非最后一个参数, 此时就是题主所说的情况了,拿题主问题中的例子来说:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

cat arg.txt是"标准输入", 这个没啥说的

关键在于这行代码中, 命令为sk.sh这个脚本, 而这个脚本要想正常执行需要传三个参数, 第一个参数是-p,第2个参数是管道前面传过来的数据,第三个参数是-l. 因为xargs默认会将管道前面传过来的数据作为命令的最后一个参数, 但在咱们这里面, sk.sh的需求是将管道前面传过来的数据作为第2个参数, 此时就要借助xargs命令的-I参数了, -I参数后面可以指定一个变量,在这里这个变量比较特殊,是{}, 这个变量中存的是每次管道前面cat arg.txt送过来的数据, 而我们将这个变量作为sk.sh命令的第2个参数, 然后执行相应的命令.

*.你可以将{}改个其它名, 如666,即:

cat arg.txt | xargs -I 666 ./sk.sh -p 666 -l

上面命令也是正确的.

=====

希望可以帮到题主, 例子举的不是很恰当, 如果题主有疑问, 欢迎追问. 如果有错误也请指出,谢谢.

xargs命令有哪些

find / | xargs grep function 查找系统根目录下面的所有文件的内容中包含有function字符串的文件列表。

find .|xargs grep x。

find . -exec grep x{} \。

***隐藏网址***

find / -name "rsync"。

描述

生成的命令行长度是Command和每个作为字符串对待的Argument(包括每个字符串的空字节终结符)的大小的总和(以字节为单位)。xargs命令限制命令行的长度。当构造的命令行运行时,组合的Argument和环境列表不能超出ARG_MAX字节。在这个约束下,如果不指定-n或-s标志,缺省命令行长度至少是由LINE_MAX指定的值。

批量文件哈希值生成及校验

日常使用过程中,对于文件的完整性的校验比较重要,最简单常见的方式是哈希值计算。主要使用场景: macOS 和 Linux 都自带了相应工具,Windows 可以通过三方工具实现。 本文以 SHA256 进行演示。 对于上面在 macOS 和 Linux 中使用 find 命令的例子,原理是将 -exec 参数后面的内容作为一个命令行来执行,并使用找到结果的每一项内容替换 {} ,这会导致两个问题: 1、可能会导致构建的命令行过长,系统报错 2、为每个找到的结果都执行一次命令,可能会导致运行的进程过多 解决方法:使用 -print 参数结合 xargs 命令使用,如: 这里 xargs 命令使用 -I 参数,是因为直接执行的话,当文件名中有空格的时候,会被解释为两个参数。使用 -I 参数则可以进行替换处理,这样可以实现格式化字符串的效果。 更多详情参见 《Linux命令学习之文件查找命令——find》 SHA256 Checksum Utilities SHA256: MD5: (完)

关于本次xargs命令用法及参数和linux shell xargs怎么用的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

xargs命令用法及参数(linux shell xargs怎么用)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.