美文网首页
每日一个linux命令17-find之xargs篇

每日一个linux命令17-find之xargs篇

作者: 1519f8ccc7b0 | 来源:发表于2017-04-24 19:52 被阅读0次

    使用exec可能存在的问题:

    1. 在使用find命令匹配的文件运行exec命令时,find命令会把匹配到的文件全部传递给exec命令,但有些系统对能够传送的exec命令有长度限制;
    2. 在有些系统中,会为每个匹配的find文件执行exec命令启动一个进程,这些在匹配文件较多时,会造成巨大的资源浪费;

    而xargs则可以解决这两个问题:

    1. xargs会分页传送匹配的文件给命令;
    2. xargs只会启动一个进程运行命令;

    参数

    使用-i参数表示:find命令的输出用{}代替
    -lN是一次处理N个参数
    -t是处理之前打印出命令

    示例:

    1. 移动文件 -i
    [root@test findTest]# ls
    2rd  f1  F1  f1.bak  F1.bak  f2  F2  f2.bak  F2.bak  f3  F3  f3.bak  F3.bak  f4  f4.bak  test.sh
    [root@test findTest]# find . -type f -name "*.bak" | xargs -i mv {} 2rd/
    [root@test findTest]# ls 2rd
    3rd  f1  F1  f1.bak  F1.bak  f2  F2  f2.bak  F2.bak  f3  F3  f3.bak  F3.bak  f4  f4.bak
    [root@test findTest]# 
    
    1. 移动文件 -l -t
    [root@test test]# find . -type f -name "*.bak"|xargs -t -l2 -i mv {} findTest/
    mv ./f3.bak findTest/ 
    mv ./F3.bak findTest/ 
    mv ./F1.bak findTest/ 
    mv ./f2.bak findTest/ 
    mv ./f4.bak findTest/ 
    mv ./F2.bak findTest/ 
    mv ./f1.bak findTest/ 
    
    1. 搜索包含特定字符的文件
    [root@test test]# find . -type f| xargs grep "Everything"
    ./lessTest/Kconfig:   Everything in tmpfs is temporary in the sense that no files will be
    ./moreTest/Kconfig:   Everything in tmpfs is temporary in the sense that no files will be
    
    1. 确认是否继续执行 -p
    [root@test test]# ls
    catTest  f1.bak  f.bak  findTest  headTest  lessTest  moreTest  nlTest
    [root@test test]# find . -type f -name "*.bak"| xargs -p rm  -f
    rm -f ./f.bak ./f1.bak ?...y
    [root@test test]# ls
    catTest  findTest  headTest  lessTest  moreTest  nlTest
    

    相关文章

      网友评论

          本文标题:每日一个linux命令17-find之xargs篇

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