精华内容
下载资源
问答
  • xargs
    2021-06-13 16:39:33

    xargs 命令的作用,是将标准输入转为命令行参数

    echo "hello word" | xargs echo
    

    上面的代码将管道左侧标准输入,转换为命令参数,传递给第二个echo命令

    xargs命令的语法如下:

    # xargs [options] command
    option[d,t,p]
    

    xargs作用在于大多数命令(比如 rm mkdir ls)与管道一起配合使用,需要xargs将标准输入转为命令行参数

    # echo "one two three" | xargs mkdir 等同与  mkdir {one,two,three}
    

    xargs的单独使用

    xargs后面的命令默认就是echo

    输入xargs按下回车后,命令行会等待用户输入,作为标准输入,你可以输入任意内容,然后按下ctrl+d表示输入结束,这时echo会把输入的内容打印输出

    -d参数与分隔符

    默认情况下,xargs将换行符和空格作为分隔符号,把标准输入的分割成一个个命令行参数

    echo -e "a\nb\nc" | xargs mkdir 等同于 echo -e "d e f" | xargs mkdir
    

    如上两个代码都能实现创建三个目录,

    -d参数可以指定其他分割符号,

    echo -en "a,b,c,d,e,f" | xargs -d "," mkdir      # echo -n 需要加上否则会多创建出来一个?的目录
    

    -p 打印出要执行的命令,询问用户是否要执行

    -t 只打印出要执行的命令,不询问用户是否要执行,直接运行

    [root@vm1 chen1.1]# ls
    1.txt  a  b  c  d  e  f
    [root@vm1 chen1.1]# echo -en "a,b,c,d,e,f" | xargs -d "," -p rmdir
    rmdir a b c d e f ?...yes
    [root@vm1 chen1.1]# ls
    1.txt
    [root@vm1 chen1.1]# echo -en "a,b,c,d,e,f" | xargs -d "," -t mkdir
    mkdir a b c d e f 
    [root@vm1 chen1.1]# ls
    1.txt  a  b  c  d  e  f
    [root@vm1 chen1.1]# 
    

    -0参数与find的 -print0 搭配使用 解决文件名带空格的问题

    由于xargs默认将空格作为分隔符号,所以不太适合处理文件名,因为文件名可能包含空格

    find命令有一个特别的参数-print0 将输出的文件列表以null分割,然后xargs 命令使用-0参数表示用null作为分割符号。

    find ./ -type d -print0 | xargs  -0 rmdir
    

    上面命令列出./路径下面的所有文件,由于分隔符号是null,所以处理包含空格的文件名,也不会报错

    还有一个原因,xargs特别适合find命令,有些命令比如rm一旦参数过多会报错 参数列表过长,而无法执行,改用xargs就没有这个问题,因为他对每个参数执行一次命令

    7  -L 参数

    如果标准输入包含多行,-L 可以指定多行作为一个命令参数

    8 -n参数

    指定每次将多项或者多个参数作为一个命令参数

    9 -I 参数

    每一项命令参数的替代字符串

    [root@vm1 chen1]# ls
    chen.txt
    [root@vm1 chen1]# cat chen.txt 
    a
    b
    c
    d
    [root@vm1 chen1]# cat chen.txt | xargs -I ff sh -c "echo ff;mkdir ff"    # -F ff(相当占位码) sh -c "命令1;命令2;命令3"
    a
    b
    c
    d
    [root@vm1 chen1]# ls
    a  b  c  chen.txt  d
    [root@vm1 chen1]# 
    

    10 --max-procs 参数

    xargs默认只用一个进程执行命令,如果命令要执行多次,必须等上一次执行完,才能执行下一次,–max-procs 参数指定同时用多个进程执行命令,–max-procs 0 表示不限制进程数

    docker ps -q | xargs -n 1 --max-procs 0 docker kill
    

    上面的命令表示,同时关闭尽可能多的docker容器,这样运行速度会很快。

    更多相关内容
  • xargs命令 过滤器

    2021-01-09 18:58:20
    xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者 stdin 并将其转换成特定命令的命令参数。 xargs也可以将单行或多行文本...
  • xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。下面这篇文章主要给大家介绍了关于linux中xargs命令用法的相关资料,需要的朋友可以参考借鉴,下面来跟着小编一起看看吧。
  • Linux xargs命令 1.功能: xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。因为以空格作为分隔符,所以有一些文件名或者其他意义的名词内含有空格的时候,...
  • Linux xargs 命令 xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。 xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 xargs 也可以将单行或多行文本...
  • Linux xargs命令的使用

    2021-01-09 00:50:10
    xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。因为以空格作为分隔符,所以有一些文件名或者其他意义的名词内含有空格的时候,xargs可能会误判。简单来说,...
  • find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 在有些系统中,使用-exec选项会...
  • git-xargs是一个命令行工具 (CLI),用于使用单个命令跨多个 Github 存储库进行更新。 你给git-xargs : 要运行的脚本或命令 回购清单 和git-xargs将: 克隆每个 repo 针对它运行您指定的脚本或命令 提交任何更改...
  • xargs命令有两个要点。第一,你必须列出目标文件。第二,你必须指定对每个文件需要执行的命令或脚本。 xargs命令被用来处理分布在不同目录下的文件: 计算所有文件的行数 打印指定文件的第一行 对每个文件执行一...
  • 在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别,本文通过实例给大家详解,需要的的...
  • xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中...
  • 在这种情况下,我们就可以使用 xargs 命令。xargs 可以将一个命令的输出作为参数发送给另一个命令。 在 Linux 中,所有标准的应用程序都有与之关联的三个数据流。分别是标准输入流(stdin),标准输出流(stdout)和...
  • 这是“xargs”unix 命令的流媒体版本。安装npm install --save xargs用法该模块导出的函数返回一个双工流,该流将写入其中的所有字符串块收集到一个数组中,该数组用作指定命令的参数向量: var streamify = ...
  • find /usr/ -type f -name ‘*.conf’ -print0 -o -name ‘*.txt’ -print0 | xargs -0 grep ‘heheda’ 上面这个命令表示: 我要浏览usr目录下所有的文件,并输出conf结尾或者txt结尾的文件名的字符流,所有文件名...
  • windows dos下xargs使用

    2022-06-01 14:02:31
    windows dos下xargs使用
  • git-xargs是一个命令行工具(CLI),可使用单个命令在多个Github存储库中进行更新。 目录引言参考资料引言概述git-xargs是一个命令行工具(CLI),用于使用单个命令在多个Github存储库中进行更新。 您给git-xargs:...
  • xargs_for_window

    2016-12-20 11:18:51
    xargs_for_window
  • xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数,默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行,不过通过 xargs 的处理,换行将被空格取代。
  • 【IT十八掌徐培成】Linux基础-04.xargs-mount-umount.zip
  • Linux命令之xargs命令

    千次阅读 2021-07-21 15:35:10
    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,...

    一、命令简介

      xargs(英文全拼: extended arguments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

    二、使用示例

    1、查看xargs命令版本

    [root@test3 ~]# xargs --version
    xargs (GNU findutils) 4.5.11
    Copyright © 2012 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    Written by Eric B. Decker, James Youngman, and Kevin Dalley.

    2、多行变单行

    [root@test3 ~]# cat test.txt |xargs
    1 this is a test! 2 this is the second number. 3 are you there?
    [root@test3 ~]# cat test.txt
    1 this is a test!
    2 this is the second number.
    3 are you there?
    [root@test3 ~]# cat test.txt |xargs
    1 this is a test! 2 this is the second number. 3 are you there?

    3、单行转多行

    [root@test3 ~]# cat 1.txt
    hello, where are you? this is a test!
    [root@test3 ~]# cat 1.txt |xargs -n3
    hello, where are
    you? this is
    a test!

    4、按照指定分隔符分割字符串

    [root@test3 ~]# echo “wuhs@sunr@sunr@wuhs@wuzy” |xargs -d@
    wuhs sunr sunr wuhs wuzy

    [root@test3 ~]# echo “wuhs@sunr@sunr@wuhs@wuzy” |xargs -d@ -n2
    wuhs sunr
    sunr wuhs
    wuzy

    5、删除查找到的文件

    [root@test3 ~]# find . -name test.txt
    ./test.txt
    [root@test3 ~]# find . -name test.txt |xargs rm -rf
    [root@test3 ~]# find . -name test.txt

    6、将查找到的文件打包

    [root@test3 ~]# find . -type f -name “*.cfg” |xargs tar -zcvf cfg.tar.gz
    ./original-ks.cfg
    ./anaconda-ks.cfg

    7、批量复制文件到指定目录

    [root@test3 ~]# find . -type f -name “.cfg" |xargs -n1 -I {} cp {} /home
    [root@test3 ~]# find . -type f -name "
    .txt” |xargs -n1 -I {} cp {} /home
    [root@test3 ~]# ll /home/
    total 20
    -rw-r–r-- 1 root root 38 Jul 21 16:34 1.txt
    -rw-r–r-- 1 root root 64 Jul 21 16:34 2.txt
    -rw------- 1 root root 2762 Jul 21 16:34 anaconda-ks.cfg
    drwx------ 7 es es 184 Jun 22 15:47 es
    drwx------ 7 gzgk gzgk 198 Jul 20 14:06 gzgk
    -rw------- 1 root root 2042 Jul 21 16:34 original-ks.cfg
    drwx------. 15 wuhs wuhs 4096 Dec 16 2020 wuhs

    8、删除文件名包含空格的文件

    find命令有一个特别的参数-print0,指定输出的文件列表以null分隔。然后,xargs命令的-0参数表示用null当作分隔符。

    [root@test3 ~]# touch “abc d”
    [root@test3 ~]# ll
    total 20
    -rw-r–r-- 1 root root 38 Jul 21 16:01 1.txt
    -rw-r–r-- 1 root root 64 Jul 21 15:57 2.txt
    -rw-r–r-- 1 root root 0 Jul 21 16:43 abc d
    -rw-------. 1 root root 2762 Dec 16 2020 anaconda-ks.cfg
    -rw-r–r-- 1 root root 1513 Jul 21 16:29 cfg.tar.gz
    -rw-------. 1 root root 2042 Dec 16 2020 original-ks.cfg
    [root@test3 ~]# find . -type f -name abc* |xargs -0 rm
    rm: cannot remove ‘./abc d\n’: No such file or directory
    [root@test3 ~]# find . -type f -name abc* -print0 |xargs -0 rm
    [root@test3 ~]# ll
    total 20
    -rw-r–r-- 1 root root 38 Jul 21 16:01 1.txt
    -rw-r–r-- 1 root root 64 Jul 21 15:57 2.txt
    -rw-------. 1 root root 2762 Dec 16 2020 anaconda-ks.cfg
    -rw-r–r-- 1 root root 1513 Jul 21 16:29 cfg.tar.gz
    -rw-------. 1 root root 2042 Dec 16 2020 original-ks.cfg

    9、打印待执行命令确认后执行

    使用-p参数打印待执行的命令,输入y或yes回车确认后执行,直接回车不执行命令。

    [root@test3 ~]# find . -type f -name 1.txt |xargs -p rm
    rm ./1.txt ?..
    [root@test3 ~]# find . -type f -name 2.txt |xargs -p rm
    rm ./2.txt ?..yes
    [root@test3 ~]# ll
    total 16
    -rw-r–r-- 1 root root 38 Jul 21 16:01 1.txt
    -rw-------. 1 root root 2762 Dec 16 2020 anaconda-ks.cfg
    -rw-r–r-- 1 root root 1513 Jul 21 16:29 cfg.tar.gz
    -rw-------. 1 root root 2042 Dec 16 2020 original-ks.cfg

    10、打印最终执行命令但不做确认

    -t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。

    [root@test3 ~]# find . -type f -name 1.txt |xargs -t rm
    rm ./1.txt

    11、批量创建目录

    [root@test3 ~]# echo “one two there” |xargs mkdir
    [root@test3 ~]# ll
    total 16
    -rw-r–r-- 1 root root 64 Jul 21 16:53 2.txt
    -rw-------. 1 root root 2762 Dec 16 2020 anaconda-ks.cfg
    -rw-r–r-- 1 root root 1513 Jul 21 16:29 cfg.tar.gz
    drwxr-xr-x 2 root root 6 Jul 21 16:58 one
    -rw-------. 1 root root 2042 Dec 16 2020 original-ks.cfg
    drwxr-xr-x 2 root root 6 Jul 21 16:58 there
    drwxr-xr-x 2 root root 6 Jul 21 16:58 two

    12、将命令参数传递给多个命令

    使用-I参数将命令行参数传给多个命令,-I file指定每一项命令行参数的替代字符串。选是将每一行参数传递给echo和mkdir命令,即显示并创建目录。

    [root@test3 ~]# cat 3.txt
    one
    two
    three
    [root@test3 ~]# cat 3.txt |xargs -I file sh -c ‘echo file;mkdir file’
    one
    two
    three

    三、使用语法及参数说明

    1、使用语法

    command | xargs [选项] command

    2、参数说明

    参数参数说明
    -0, --null项目之间用null分隔,而不是空格。禁用引号和反斜杠处理
    -a, --arg-file=FILE从文件中读入作为 stdin
    -d, --delimiter=CHARACTER自定义分隔符
    -E ENDxargs分析到含有flag这个标志的时候就停止
    -e [END], --eof[=END]注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
    –help打印帮助选项
    -I R将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替
    -i,–replace=[R]将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替
    -L,-l, --max-lines=MAX-LINES如果标准输入包含多行,-L参数指定多少行作为一个命令行参数。
    -l从标准输入一次读取 num 行送给 command 命令。
    -n, --max-args=MAX-ARGS后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
    -P, --max-procs=MAX-PROCSxargs默认只用一个进程执行命令。如果命令要执行多次,必须等上一次执行完,才能执行下一次,0表示不限制进程数。
    -p, --interactive当每次执行一个argument的时候询问一次用户。
    –process-slot-var=VAR在子进程中设置环境变量var过程
    -r, --no-run-if-empty当xargs的输入为空的时候则停止xargs,不用再去执行了。
    -s, --max-chars=MAX-CHARS命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
    –show-limits显示命令行长度的限制
    -t, --verbose在执行之前详细打印命令
    –version打印版本号信息
    -x, --exitexit的意思,主要是配合-s使用
    展开全文
  • xargs 命令教程

    2021-05-11 20:17:42
    xargs是 Unix 系统的一个很有用的命令,但是常常被忽视,很多人不了解它的用法。本文介绍如何使用这个命令。一、标准输入与管道命令Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数。$ cat /etc/...

    xargs是 Unix 系统的一个很有用的命令,但是常常被忽视,很多人不了解它的用法。

    本文介绍如何使用这个命令。

    c155dadf4e47df53ac369f0c2d221afc.png

    一、标准输入与管道命令

    Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数。

    $ cat /etc/passwd | grep root

    上面的代码使用了管道命令(|)。管道命令的作用,是将左侧命令(cat /etc/passwd)的标准输出转换为标准输入,提供给右侧命令(grep root)作为参数。

    因为grep命令可以接受标准输入作为参数,所以上面的代码等同于下面的代码。

    $ grep root /etc/passwd

    但是,大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数。举例来说,echo命令就不接受管道传参。

    $ echo "hello world" | echo

    上面的代码不会有输出。因为管道右侧的echo不接受管道传来的标准输入作为参数。

    二、xargs 命令的作用

    xargs命令的作用,是将标准输入转为命令行参数。

    $ echo "hello world" | xargs echo

    hello world

    上面的代码将管道左侧的标准输入,转为命令行参数hello world,传给第二个echo命令。

    xargs命令的格式如下。

    $ xargs [-options] [command]

    真正执行的命令,紧跟在xargs后面,接受xargs传来的参数。

    xargs的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。

    $ echo "one two three" | xargs mkdir

    上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

    三、xargs 的单独使用

    xargs后面的命令默认是echo。

    $ xargs

    # 等同于

    $ xargs echo

    大多数时候,xargs命令都是跟管道一起使用的。但是,它也可以单独使用。

    输入xargs按下回车以后,命令行就会等待用户输入,作为标准输入。你可以输入任意内容,然后按下Ctrl d,表示输入结束,这时echo命令就会把前面的输入打印出来。

    $ xargs

    hello (Ctrl + d)

    hello

    再看一个例子。

    $ xargs find -name

    "*.txt"

    ./foo.txt

    ./hello.txt

    上面的例子输入xargs find -name以后,命令行会等待用户输入所要搜索的文件。用户输入"*.txt",表示搜索当前目录下的所有 TXT 文件,然后按下Ctrl d,表示输入结束。这时就相当执行find -name *.txt。

    四、-d 参数与分隔符

    默认情况下,xargs将换行符和空格作为分隔符,把标准输入分解成一个个命令行参数。

    $ echo "one two three" | xargs mkdir

    上面代码中,mkdir会新建三个子目录,因为xargs将one two three分解成三个命令行参数,执行mkdir one two three。

    -d参数可以更改分隔符。

    $ echo -e "a\tb\tc" | xargs -d "\t" echo

    a b c

    上面的命令指定制表符\t作为分隔符,所以a\tb\tc就转换成了三个命令行参数。echo命令的-e参数表示解释转义字符。

    五、-p 参数,-t 参数

    使用xargs命令以后,由于存在转换参数过程,有时需要确认一下到底执行的是什么命令。

    -p参数打印出要执行的命令,询问用户是否要执行。

    $ echo 'one two three' | xargs -p touch

    touch one two three ?...

    上面的命令执行以后,会打印出最终要执行的命令,让用户确认。用户输入y以后(大小写皆可),才会真正执行。

    -t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。

    $ echo 'one two three' | xargs -t rm

    rm one two three

    六、-0 参数与 find 命令

    由于xargs默认将空格作为分隔符,所以不太适合处理文件名,因为文件名可能包含空格。

    find命令有一个特别的参数-print0,指定输出的文件列表以null分隔。然后,xargs命令的-0参数表示用null当作分隔符。

    $ find /path -type f -print0 | xargs -0 rm

    上面命令删除/path路径下的所有文件。由于分隔符是null,所以处理包含空格的文件名,也不会报错。

    还有一个原因,使得xargs特别适合find命令。有些命令(比如rm)一旦参数过多会报错"参数列表过长",而无法执行,改用xargs就没有这个问题,因为它对每个参数执行一次命令。

    $ find . -name "*.txt" | xargs grep "abc"

    上面命令找出所有 TXT 文件以后,对每个文件搜索一次是否包含字符串abc。

    七、-L 参数

    如果标准输入包含多行,-L参数指定多少行作为一个命令行参数。

    $ xargs find -name

    "*.txt"

    "*.md"

    find: paths must precede expression: `*.md'

    上面命令同时将"*.txt"和*.md两行作为命令行参数,传给find命令导致报错。

    使用-L参数,指定每行作为一个命令行参数,就不会报错。

    $ xargs -L 1 find -name

    "*.txt"

    ./foo.txt

    ./hello.txt

    "*.md"

    ./README.md

    上面命令指定了每一行(-L 1)作为命令行参数,分别运行一次命令(find -name)。

    下面是另一个例子。

    $ echo -e "a\nb\nc" | xargs -L 1 echo

    a

    b

    c

    上面代码指定每行运行一次echo命令,所以echo命令执行了三次,输出了三行。

    八、-n 参数

    -L参数虽然解决了多行的问题,但是有时用户会在同一行输入多项。

    $ xargs find -name

    "*.txt" "*.md"

    find: paths must precede expression: `*.md'

    上面的命令将同一行的两项作为命令行参数,导致报错。

    -n参数指定每次将多少项,作为命令行参数。

    $ xargs -n 1 find -name

    上面命令指定将每一项(-n 1)标准输入作为命令行参数,分别执行一次命令(find -name)。

    下面是另一个例子。

    $ echo {0..9} | xargs -n 2 echo

    0 1

    2 3

    4 5

    6 7

    8 9

    上面命令指定,每两个参数运行一次echo命令。所以,10个阿拉伯数字运行了五次echo命令,输出了五行。

    九、-I 参数

    如果xargs要将命令行参数传给多个命令,可以使用-I参数。

    -I指定每一项命令行参数的替代字符串。

    $ cat foo.txt

    one

    two

    three

    $ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'

    one

    two

    three

    $ ls

    one two three

    上面代码中,foo.txt是一个三行的文本文件。我们希望对每一项命令行参数,执行两个命令(echo和mkdir),使用-I file表示file是命令行参数的替代字符串。执行命令时,具体的参数会替代掉echo file; mkdir file里面的两个file。

    十、--max-procs 参数

    xargs默认只用一个进程执行命令。如果命令要执行多次,必须等上一次执行完,才能执行下一次。

    --max-procs参数指定同时用多少个进程并行执行命令。--max-procs 2表示同时最多使用两个进程,--max-procs 0表示不限制进程数。

    $ docker ps -q | xargs -n 1 --max-procs 0 docker kill

    上面命令表示,同时关闭尽可能多的 Docker 容器,这样运行速度会快很多。

    十一、参考链接

    (完)

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,650
精华内容 40,660
关键字:

xargs