zoukankan      html  css  js  c++  java
  • linux基础命令:xargs

    linux下xargs命令详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

    例子一

    1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题
    
    find ~ -name ‘*.log’ -print0 | xargs -0 rm -f
    
    2. 获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l
    
    # find /etc -name "*.conf" | xargs ls –l
    
    3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接
    
    # cat url-list.txt | xargs wget –c
    
    4. 查找所有的jpg 文件,并且压缩它
    
    # find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
    
    5. 拷贝所有的图片文件到一个外部的硬盘驱动 
    
    # ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

    例子二

    [root@www ~]# xargs [-0epn] command
    选项与参数:
    -0  :如果输入的 stdin 含有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数
          可以将他还原成一般字符。这个参数可以用于特殊状态喔!
    -e  :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到
          这个字符串时,就会停止继续工作!
    -p  :在运行每个命令的 argument 时,都会询问使用者的意思;
    -n  :后面接次数,每次 command 命令运行时,要使用几个参数的意思。看范例三。
    当 xargs 后面没有接任何的命令时,默认是以 echo 来进行输出喔!
    
    范例一:将 /etc/passwd 内的第一栏取出,仅取三行,使用 finger 这个命令将每个
            账号内容秀出来
    [root@www ~]# cut -d':' -f1 /etc/passwd |head -n 3| xargs finger
    Login: root                             Name: root
    Directory: /root                        Shell: /bin/bash
    Never logged in.
    No mail.
    No Plan.
    ......底下省略.....
    # 由 finger account 可以取得该账号的相关说明内容,例如上面的输出就是 finger root
    # 后的结果。在这个例子当中,我们利用 cut 取出账号名称,用 head 取出三个账号,
    # 最后则是由 xargs 将三个账号的名称变成 finger 后面需要的参数!
    
    范例二:同上,但是每次运行 finger 时,都要询问使用者是否动作?
    [root@www ~]# cut -d':' -f1 /etc/passwd |head -n 3| xargs -p finger
    finger root bin daemon ?...y
    .....(底下省略)....
    # 呵呵!这个 -p 的选项可以让用户的使用过程中,被询问到每个命令是否运行!
    
    范例三:将所有的 /etc/passwd 内的账号都以 finger 查阅,但一次仅查阅五个账号
    [root@www ~]# cut -d':' -f1 /etc/passwd | xargs -p -n 5 finger
    finger root bin daemon adm lp ?...y
    .....(中间省略)....
    finger uucp operator games gopher ftp ?...y
    .....(底下省略)....
    # 在这里鸟哥使用了 -p 这个参数来让您对于 -n 更有概念。一般来说,某些命令后面
    # 可以接的 arguments 是有限制的,不能无限制的累加,此时,我们可以利用 -n
    # 来帮助我们将参数分成数个部分,每个部分分别再以命令来运行!这样就 OK 啦!^_^
    
    范例四:同上,但是当分析到 lp 就结束这串命令?
    [root@www ~]# cut -d':' -f1 /etc/passwd | xargs -p -e'lp' finger
    finger root bin daemon adm ?...
    # 仔细与上面的案例做比较。也同时注意,那个 -e'lp' 是连在一起的,中间没有空格键。
    # 上个例子当中,第五个参数是 lp 啊,那么我们下达 -e'lp' 后,则分析到 lp
    # 这个字符串时,后面的其他 stdin 的内容就会被 xargs 舍弃掉了!  其实,在 man xargs 里面就有三四个小范例,您可以自行参考一下内容。 此外, xargs 真的是很好用的一个玩意儿!您真的需要好好的参详参详!会使用 xargs 的原因是, 很多命令其实并不支持管线命令,因此我们可以透过 xargs 来提供该命令引用 standard input 之用!举例来说,我们使用如下的范例来说明:
    
    范例五:找出 /sbin 底下具有特殊权限的档名,并使用 ls -l 列出详细属性
    [root@www ~]# find /sbin -perm +7000 | ls -l
    # 结果竟然仅有列出 root 所在目录下的文件!这不是我们要的!
    # 因为 ll (ls) 并不是管线命令的原因啊!
    
    [root@www ~]# find /sbin -perm +7000 | xargs ls -l
    -rwsr-xr-x 1 root root 70420 May 25  2008 /sbin/mount.nfs
    -rwsr-xr-x 1 root root 70424 May 25  2008 /sbin/mount.nfs4
    -rwxr-sr-x 1 root root  5920 Jun 15  2008 /sbin/netreport
    ....(底下省略)....
  • 相关阅读:
    axios 配置baseURL 报错 Uncaught TypeError: Cannot set properties of undefined (setting 'baseURL')
    VSCode 添加 PHP debug 调试
    docker安装mysql,oracle,redis
    rocketmq入门笔记
    MyEclipse中导入jar包
    jar cvf 方式打包java web项目
    关于web工作流引擎概述
    企业服务总线解决方案剖析
    javaScript中取当前时间Date的前后时间
    json与对象转换的工具集合类
  • 原文地址:https://www.cnblogs.com/wzy23/p/11378112.html
Copyright © 2011-2022 走看看