• 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和名字的映射。

    完! 

  • 相关阅读:
    LeetCode 83. Remove Duplicates from Sorted List (从有序链表中去除重复项)
    LeetCode 21. Merge Two Sorted Lists (合并两个有序链表)
    LeetCode 720. Longest Word in Dictionary (字典里最长的单词)
    LeetCode 690. Employee Importance (职员的重要值)
    LeetCode 645. Set Mismatch (集合不匹配)
    LeetCode 500. Keyboard Row (键盘行)
    LeetCode 463. Island Perimeter (岛的周长)
    115.Distinct Subsequences
    55.Jump Game
    124.Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/itech/p/2377424.html
Copyright © 2020-2023  润新知