zoukankan      html  css  js  c++  java
  • xargs的用法

    处理带有空格的文件名

    #我们创建了3个日志文件, 且故意让文件名称中都含有空格
    [roc@roclinux ~]$ for((i=0;i<3;i++)); do touch "test ${i}.log";done
    #我们列出创建的文件
    [roc@roclinux ~]$ ls -1F
    test 0.log
    test 1.log
    test 2.log

    xargs 提供了-0选项,允许将 NULL 作为分隔符,而 find 命令也心有灵犀地提供了对应的选项来产生以 NULL 字符作为分隔符的输出。

    find 命令提供的对应方法是 -print0 选项,在文件名之后输出 NULL,而不像 -print 选项那样输出换行符(换行符会被 xargs 替换成空格)。

    [roc@roclinux ~]$ find . -name '*.log' -print0 | xargs -0 rm -f

    需要用户确认

    如果在前一个命令的标准输出中,会有一些参数是你不希望或者不确定是否要传送给后面命令的,这个时候我们就希望 xargs 在传送参数前和我们确认一下。而-p选项恰好可以实现这个愿望,我们可以输入 y 或者 n 来选择是否要执行当前命令: 

    [roc@roclinux ~]$ find . -type f |xargs -p rm -f
    rm -f ./china.txt ./usa.txt ./japan.txt ?...n

    每一条都需要询问:

    [roc@roclinux 20160408]$ find . -type f |xargs -p -n 1 rm -f
    rm -f ./china.txt ?...n
    rm -f ./usa.txt ?...y
    rm -f ./japan.txt ?...n

    遇到就停止

    比如,我们正在处理一份日志文件 country.list 中的内容,将日志文件中的字符以空行作为分隔符依次 echo 出来,一旦遇到 korea 便终止退出:

    [roc@roclinux ~]$ echo "china usa korea japan" > country.list
     
    [roc@roclinux ~]$ cat country.list
    china usa korea japan
     
    [roc@roclinux ~]$ cat country.list | xargs -E 'korea' echo
    china usa

    你可能一生都不会遇到的参数过长报错

    我们来模拟一个这样的场景,新建 10 万个日志文件,并且尝试用 rm 命令一次性删除:

    [roc@roclinux ~]$ for((i=0;i<100000;i++)); do touch test${i}.log;done
     
    [roc@roclinux ~]$ rm $(find . -type f -name '*.log')
    -bash: /bin/rm: Argument list too long

    出现了“Argument list too long”报错,这说明 rm 可接受的参数长度达到了极限。这其实并非 rm 的错,而是系统限制了参数的长度。通过下面的命令可以查看到系统的参数长度限制值:

    [roc@roclinux ~]$ getconf ARG_MAX
    2621440
    [roc@roclinux ~]$ find . -name '*.log' -print | xargs rm

    把*.txt的文件重命名为*.txt.bak

    ls *.txt |xargs -t -i  mv {} {}.bak

    查找文件并压缩

    这样就把“jpg”的文件压缩了。

    find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
  • 相关阅读:
    【HDOJ】1224 Free DIY Tour
    【HDOJ】1494 跑跑卡丁车
    【HDOJ】1495 非常可乐
    ACMer
    find the nth digit
    A C
    已知六条边的边长,求四面体体积
    快速排序
    {A} + {B}
    素数回文
  • 原文地址:https://www.cnblogs.com/snow-backup/p/11344544.html
Copyright © 2011-2022 走看看