• Linux命令xargs+cut


    一 xargs
    在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
    find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像find的-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
    来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
    在当前目录下查找“.svn”文件夹,并产出这些文件夹。“find”命令查找,然后将查找出的内容传给后面的“rm”命令
    find . -type d -name ".svn" | xargs rm -rf;
    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据. xargs的默认命令是echo.
    如下实例删除数量比较多的文件
    ls | xargs -n 10 rm -fr
    ls当然是输出所有的文件名(用空格分割)
    xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数,也就是说将所有文件名10个为一组,由rm -rf删除,这样就不会超过命令行的长度了。
    实例要把文件名插入命令行的中间,输入: 
    ls | xargs  -t -I {} mv {} {}.old
    该命令序列通过在每个名字结尾添加 .old 来重命名在当前目录里的所有文件。-I 标志告诉 xargs 命令插入有{}(花括号)出现的 ls 目录列表的每一行。如果当前目录包含文件 chap1、chap2 和 chap3,这会构造下面的命令: 
    mv chap1 chap1.old
    mv chap2 chap2.old
    mv chap3 chap3.old

    实例: 将某目录下的所有文件在新的目录下创建连接

    cd $newdir

    ls $olddir | xargs -t -I '{}' ln -s $olddir/'{}' '{}'

    如果需要只对某些条件的文件创建则在中间加入 | grep XXX 

    二 cut
    选出文件每行中固定的一段文字。
    cut -c1-72 file : 结果为file的每行的第1到72列。
    cut -f1,4,5 file : 文件每行为逗号或空格分隔的多个字段时,结果为file的每行的第1,4,5字段。
    cut -d:: 表示每行中字段的分隔符为:。
    例如cut -d: -f1,5 /etc/passwd,获得所有的用户id和名字的映射。

    完! 

  • 相关阅读:
    初试PL/SQL并行编程
    SVN 让项目某些文件不受版本控制
    分析php获取客户端ip
    一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)
    js遍历对象的属性并且动态添加属性
    CodeForces 150B- Quantity of Strings 推算..
    linux 中多线程使用
    Microsoft Deployment Toolkit 2013 Preview Release Now Available
    谁有SMI-S Provider的一些源码,能参考一下吗
    hdu1395-2^x mod n = 1
  • 原文地址:https://www.cnblogs.com/itech/p/2377424.html
Copyright © 2020-2023  润新知