• Linux xargs命令


    xargs默认接echo,直接输入xargs后,会等待用户输入,直到用户输入 ctrl+d,才会结束

    $ xargs
    abc
    def
    hik       <--- 此处输入完成后回车,ctrl+d
    abc def hik    <-----显示的结果,将你输入的内容按照空白字符分割(空格,回车换行等),打印出来
    

    -t:显示执行的命令

    $ xargs -t     # -t 参数:显示执行的命令
    abc
    123            # 输入了abc和123,ctrl+d结束输入
    echo abc 123   # 实际执行的命令是 echo
    abc 123
    

    -d 分隔符:分隔符

    xargs默认用空格、换行符、制表符等作为分割,把标准输入分割成一个个命令参数

    $ echo 'a b      c' | xargs
    a b c          <-- 把上面空格分割,然后打印出来各个参数
    

    自定义分隔:

    $ echo 'a b      c' | xargs -d 'b'      <-- 用字符‘b’分割
    a        c
    

    -p:用户确认

    -p参数可以在执行命令时,弹出确认消息,让用户确认后才会执行相应的命令

    $ echo 'a b      c' | xargs -d 'b' -p
    echo a        c
     ?...y               <-- 输入y,确认
    a        c
    

    -n 数量:指定将几个参数传递给命令

    不用-n参数

    $ echo 'a      b c' | xargs -t echo
    echo a b c       # 执行的是 echo a b c,也就是把所有的参数一次性传递给了echo
    a b c
    

    每次传递一个参数,也就是将a b c这三个参数,一个一个的交给echo执行

    $ echo 'a      b c' | xargs -n 1 -t echo   # 设定每次传递1个参数给echo
    echo a          # 看的出来,就传递了一个a
    a
    echo b
    b
    echo c
    c
    

    -i str:给参数的值起个变量名 str,默认是{},官方建议使用-I

    先ls一下,查看文件

    $ ls
    aaa  chrome.lnk*  eclipse.lnk*  help.txt  name.txt  Typora.lnk*
    
    $ ls | xargs -i echo "{} .." # 将传递进来的参数,用{}代替
    aaa ..
    chrome.lnk* ..
    eclipse.lnk* ..
    help.txt ..
    name.txt ..
    Typora.lnk* ..
    

    -I str:类似-i

    $ ls | xargs -I 'name' echo "name ...."  # 将传递的参数命名为name
    aaa ....
    chrome.lnk* ....
    eclipse.lnk* ....
    help.txt ....
    name.txt ....
    Typora.lnk* ....
    

    -0:以null作为分隔符

    find命令有个参数 -print0,可以将查找的内容以 null 分割,-0参数可以配合使用

    正常的find

    $ find -type f
    ./a b c   e.pub      # 注意这个名字带有空格的文件
    ./aaa
    ./chrome.lnk
    ./eclipse.lnk
    ./help.txt
    ./name.txt
    ./Typora.lnk
    

    find 命令的 -print0 参数

    $ find -type f -print0
    ./a b c   e.pub./aaa./chrome.lnk./eclipse.lnk./help.txt./name.txt./Typora.lnk  # 以null分割
    

    配合xargs使用,名字带有空格的文件,被拆分了!

    $ find -type f | xargs -n 1
    ./a     # 文件名有空格,被拆开了
    b
    c
    e.pub
    ./aaa
    ./chrome.lnk
    ./eclipse.lnk
    ./help.txt
    ./name.txt
    ./Typora.lnk
    

    使用 -print0 和 xargs 的 -0

    $ find -type f -print0 | xargs -n 1 -0
    ./a b c   e.pub              # 文件完好
    ./aaa
    ./chrome.lnk
    ./eclipse.lnk
    ./help.txt
    ./name.txt
    ./Typora.lnk
    

    其实上面这个例子不使用 -0 也可以,比如手动指定分隔符为 ,即回车换行符,而不用默认的空白符号:

    $ find -type f| xargs -d '
    ' -n 1
    ./a b c   e.pub
    ./aaa
    ./chrome.lnk
    ./eclipse.lnk
    ./help.txt
    ./name.txt
    ./Typora.lnk
    

    -L 数量:用几行作为命令参数

    -L可以将每行的数据进行分割,然后再把几行的数据重组,作为一个整体传递给下一个命令

    下面的例子有三行数据,注意中间的 ,前两行数据又有很多空格,xargs将这些行进行分割,然后每几行的参数放到一起,传递给下一个命令(默认是echo,显示消息)

    $ printf "a    b c
    d e     f
    ghi" | xargs -L 1
    a b c           # a b c,一次传递一行参数给echo
    d e f
    ghi
    
    $ printf "a    b c
    d e     f
    ghi" | xargs -L 2 
    a b c d e f     # 一次性传递了两行
    ghi
    

    -P 数量:一次用几个进程执行

    -P 0 代表不限制几个进程,-P 2代表用2个进程。

  • 相关阅读:
    小学生双倍快乐
    暑期随笔
    akm
    设计原型
    测试与优化
    小学生求求你别折磨程序员
    小学生快乐刷题
    枪在手,跟我走

    第一次团队作业
  • 原文地址:https://www.cnblogs.com/wztshine/p/13397962.html
Copyright © 2020-2023  润新知