Linux中的xargs

作者: 学习编程王同学 | 来源:发表于2018-06-12 17:09 被阅读30次

    xargs将参数作为标准输入传递给指定程序。它的一个应用场景是:一些程序无法从管道中读取输入,比如rmkill等等,在需要使用管道时,可以使用xargs命令。

    下面的例子中,ls -l命令并不会理会now.txt,而是直接输出目录中的文件列表:

    $ echo 'now.txt' | ls -l
    total 2072
    -rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file
    drwxrwxrwx 2 tom tom    4096 May 31 16:42 a
    -rwxrwxr-x 1 tom tom      10 Jun 12 14:56 a.txt
    drwxrwxrwx 2 tom tom    4096 May 29  2017 bin
    drwxrwxrwx 5 tom tom    4096 Jun  5 17:25 homework
    drwxrwxrwx 3 tom tom    4096 May 12 10:37 name
    -rwxrwxr-x 1 tom tom      14 Jun 12 12:18 now.txt
    

    可以使用xargs处理这个情况,用管道将echo输出传给xargs作为参数,xargs将这些参数作为ls -l的标准输入:

    $ echo 'now.txt' | xargs ls -l
    -rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt
    

    -i命令选项使xargs具有插入功能,使用{}代表参数的占位符:

    $ find -maxdepth 1 -type f '!' -name '.*' | xargs -i mv {} ./backups/{}.bk
    

    这条命令寻找当前目录中所有的普通文件,并将其移动到./backups目录中,每个文件被添加后缀名.bk

    使用-t命令选项显示具体执行的命令:

    $ echo "now.txt.bk" | xargs -t ls -l
    ls -l now.txt.bk
    -rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt.bk
    

    在一些情况下,xargs没有从管道中得到内容,但是其之后的命令还是会运行:

    $ find ./ -empty
    $ find ./ -empty | xargs ls -l
    total 2056
    -rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file.bk
    -rwxrwxr-x 1 tom tom      10 Jun 12 14:56 a.txt.bk
    -rwxrwxr-x 1 tom tom      14 Jun 12 12:18 now.txt.bk
    

    使用-r命令参数避免这种情况:

    $ find ./ -empty | xargs -r ls -l
    $
    

    相关文章

      网友评论

        本文标题:Linux中的xargs

        本文链接:https://www.haomeiwen.com/subject/kmdreftx.html