zoukankan      html  css  js  c++  java
  • xargs详解

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf * 就将以log结尾的文件删除了,如果我想去移动或者复制就需要使用参数来代替了。

    xargs -i 参数或者-I参数配合{}即可进行文件的操作。

    [root@centos17 linshi]# find . -type f -name "*.log" | xargs -i cp {} /tmp/k/

    [root@centos17 linshi]# find . -type f -name "*.log" | xargs -I {} cp {} /tmp/n/

    结果出来了,
      加-i 参数直接用 {}就能代替管道之前的标准输出的内容;
      加 -I 参数 需要事先指定替换字符。



    其他案例:
    echo --help | xargs cat  
    #将echo输出的信息作为cat命令的参数使用,xargs传递参数,将前一个命令的标准输出作为后一个命令的参数使用
    ls *.txt | xargs -i mv {} /mnt
    #查看当前目录下所有txt文件,xargs的-i参数是将前面的标准输出作为参数传递给{}
    echo "ni|shi|shui" | xargs -d"|" -n2
    #xargs的-d参数指定分隔符,-n表示每行显示的列数

    [root@b test]# find . -name "*.txt" -exec tar -cf a.tar {} ;
    [root@b test]# tar -tf a.tar
    ./m.txt

    find命令的-exec参数将前面find查找到的内容交给后面的tar命令打包,由于find每次查找一个就执行一次exec,所以tar最后打包的文件全部覆盖只剩下最后一个文件。

    [root@b test]# find . -name "*.txt" | xargs -i tar cf b.tar {}
    [root@b test]# tar -tf b.tar
    ./m.txt

    [root@b test]# find . -name "*.txt" -print | xargs -i tar cf b.tar {}
    [root@b test]# tar -tf b.tar
    ./m.txt

    #写法相同,xargs的-I参数表示将前面find的信息传递到后面{}进行打包,每查找到一个文件就进行打包一次,所以会重复覆盖。

    [root@b test]# find . -name "*.txt" -print0 | xargs -0 tar cf b.tar
    [root@b test]# tar -tf b.tar
    ./a.txt
    ./b.txt
    ./m.txt

    #print0表示将find查找的内容在同一行输出,xargs的-0参数指定以null为分隔符来进行打包。

  • 相关阅读:
    PostgreSQL查看等待锁的SQL和进程
    effective_io_concurrency很重要的一个参数
    PostgreSQL逻辑复制到kafka-实践
    Linux下路由配置梳理(转)
    创建B树,动态添加节点,并使用三种遍历算法对树进行遍历
    思考--PostgreSQL在与mysql的比较中稍微弱势项
    思考-继续思考在数据库中两个表join的问题
    思考--mysql 分库分表的思考
    超级实用的网址大全
    C++ 读取txt文本内容,并将结果保存到新文本
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/10800939.html
Copyright © 2011-2022 走看看