zoukankan      html  css  js  c++  java
  • 2.7 xargs和exec详解【转】

    本文转载自:http://ask.apelearn.com/question/13323

    常用在查找中exec主要是和find一起配合使用,而xargs就要比exec用的地方要多了。

    exec  应用
    使用find命令时,经常使用一个选项就是这个-exec了,比如,查找当前目录创建时间大于10天的文件并删除:

    # find . -mtime +10 -exec rm -rf {} ;这个命令中也是把{}作为前面find出来的文件的替代符,后面的 为 ; 的脱意符,不然shell会把分号作为该行命令的结尾。这个-exec有时候也挺实用的,它同样可以实现刚刚上面批量更改文件名的需求:
    [root@localhost test]# ls
    1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  5.txt_bak
    [root@localhost test]# find ./*_bak -exec mv {} {}_bak ;
    [root@localhost test]# ls
    1.txt_bak_bak  2.txt_bak_bak  3.txt_bak_bak  4.txt_bak_bak  5.txt_bak_bak


    # find ./*_bak    查找文件     -exec mv {} {}_bak ;    将其重命名(  -exec有并且的意思但是有不完全一样,因为这里是一条命令)



    xargs应用



    它的作用就是把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。

    [root@localhost ~]# echo "121212121212" > 123.txt
    [root@localhost ~]# ls 123.txt | xargs cat
    121212121212


    xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除。

    [root@localhost ~]# find . -mtime +10 |xargs rm
    这种应用是最为常见的,xargs后面的rm 也可以加选项,当是目录时,就需要-r选项了。


    xargs的这个功能不叫什么,它的另一个功能才叫神奇。


    例如:
    现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步。

    [root@localhost ~]# mkdir test
    [root@localhost ~]# cd test
    [root@localhost test]# touch 1.txt 2.txt 3.txt 4.txt 5.txt
    [root@localhost test]# ls
    1.txt  2.txt  3.txt  4.txt  5.txt
    [root@localhost test]# ls *.txt |xargs -n1 -i{} mv {} {}_bak
    [root@localhost test]# ls
    1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  5.txt_bak


    xargs -n1 –i{} 类似for循环,
    -n1意思是一个一个对象的去处理,
    -i{}把前面的对象使用{}取代,
    mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。
    你刚开始接触这个命令时也许有点难以理解,多练习一下你就会熟悉了,
    记住这个应用,很实用。
    也可以这样
    # ls *.txt |xargs -n1 -i{} cp {} {}_bak 

  • 相关阅读:
    Windows 下搭建Android开发环境
    浅谈C/C++中运算符的优先级、运算符的结合性以及操作数的求值顺序
    更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题
    单词计数 soj1076
    拓扑排序
    浅谈C和C++中的const关键字
    快速排序
    拓扑排序 soj1075
    集合划分问题
    浅谈C/C++中的顺序点和副作用
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7994668.html
Copyright © 2011-2022 走看看