精华内容
下载资源
问答
  • xargs

    2016-12-24 15:41:04
    xargs

    xargs

    xargs

    介绍

    xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

    xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代

    使用

    多行变单行

    cat test.txt
    
    a b c
    d e f
    
    cat test.txt|xargs
    
    a b c d e f
    

    -n 多行输出

    cat test.txt
    
    a b c
    d e f
    
    cat test.txt|xargs -n2
    
    a b
    c d
    e f
    

    -d 自定义界符

    echo "nameXnameXnameXname" | xargs -dX 
    
    name name name name
    

    读取stdin,将格式化后的参数传递给命令行

    xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
    
    cat arg.txt 
    aaa 
    bbb 
    ccc
    
    ----
    
    cat arg.txt | xargs -I {} ./sk.sh -p {} -l 
    
    -p aaa -l 
    -p bbb -l 
    -p ccc -l 
    

    -I后面替换的字符串{}也可以不指定,直接使用第二个{}

    ls *.jpg | xargs -n1 -I cp {} /data/images
    

    xargs和find结合使用

    用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题: 
    
    find . -type f -name "*.log" -print0 | xargs -0 rm -f
    
    xargs -0\0作为定界符。 
    
    统计一个源代码目录中所有php文件的行数: 
    find . -type f -name "*.php" -print0 | xargs -0 wc -l 
    
    查找所有的jpg 文件,并且压缩它们: 
    find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
    

    xargs其他应用

    假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
    cat url-list.txt | xargs wget -c
    
    展开全文
  • Xargs

    2019-09-26 21:33:03
    xargs 紧跟在管道操作符之后,它使用标准输入作为主要的数据源 例如:ls *.c | xargs grep main xargs 默认会执行echo命令 1.将多行输入转换成单行输出 cat example.txt | xargs 2.将单行输入转换成多行输出 ...

    xargs 紧跟在管道操作符之后,它使用标准输入作为主要的数据源

    例如:ls *.c | xargs grep main

    xargs 默认会执行echo命令

    1.将多行输入转换成单行输出

    cat example.txt | xargs

    2.将单行输入转换成多行输出

    cat example.txt | xargs -n 3

    xargs 工作原理:xargs命令接受来自stdin的输入,将数据解析成单个元素,然后调用指定命令并将这些元素作为该命令的参数。xargs默认使用空白字符分割输入并执行/bin/echo

    -d 指定分割符

    例如:echo "splitXsplit2Xsplit3Xsplit4X" | xargs -d X

    -n 指定输出行数

    echo "splitXsplit2Xsplit3Xsplit4X" | xargs -d X -n 2

    -I 用于指定替换字符串

    cat args.txt | xargs -I {} ./cecho.sh -p {} -l

    3.结合find使用xargs

    危险示例:find . -type f -name "*.txt" -print | xargs rm -f

    以'\n',' '为分割,当文件名中有空格时,容易删错文件

    正确示例:find . -type f -name "*.txt" -print0 | xargs -0 rm -f 

    以'\0'--空字符为作为分割符。

    4.统计源代码目录中所有C程序文件的行数

    find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l

    5.结合stdin,巧妙运用while语句和子shell

    $ cat files.txt | ( while read arg; do cat $arg; done )

    # 等同于cat files.txt | xargs -I {} cat {}

    cmd0 | ( cmd1;cmd2;cmd3 ) | cmd4

    如果cmd1 是 cd /,那么就会改变子shell工作目录,然而这种改变仅局限于该子shell内部,cmd4 者不受影响

    shell的-c选项可以调用子shell来执行命令行脚本,它可以与xargs结合解决多次替换的问题。

    例如:find . -name '*.c' | xargs -I ^ sh -c "echo -ne '\n ^: '; grep main ^"

     

    转载于:https://www.cnblogs.com/HHPy/p/9689775.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,360
精华内容 6,144
关键字:

xargs