在我们使用find命令查找一些文件时,由于find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。其和find命令配合使用的格式如下:
find | xargs COMMAND
XARGS
. xargs - 从标准输入或管道构造参数列表并运行命令
xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
xargs是一个非常强大的命令,可以取一个命令的输出作为另一个命令的参数。
这个xargs命令会执行一个有趣的函数。它从标准输入或管道接受输入,并把输入转换为一个特定命令的参数列表。
由于xargs命令的这些特性所以当我们使用find命令查找一些文件并将查找结果传递给后面指定的命令时,如果担心后面指定的命令不能接受过多的参数时从而导致命令报错,便可以使用xargs命令接受find 命令的输出结果并作为xargs命令自身的参数列表;
如以下命令:
[root@localhost ~]# mkdir -p -v playground/dir-{00{1..99},0{10..99},100}
[root@localhost ~]# 1014 touch playground/dir-{00{1..99},0{10..99},100}/file-{A-Z}
创建一百个子目录,每个子目录下创建26个空文件;
[root@localhost ~]# find /root/playground -type f -name 'file-A'
使用find命令查找file-A 这个文件 ,这个命令会产生一个较长输出(190行), 在这样的情况下我们便可以使用xargs命令通过管道接受find命令的输出结果,并且把find命令的输出结果作为某个命令的参数,如ls -l 命令 :
[root@localhost ~]# find /root/playground -type f -name 'file-A' | xargs ls -l
效果与
[root@localhost ~]find /root/playground -type f -name 'file-A' -exec ls -l {} \;
命令一样且有效的避免了参数个数过多导致命令出现溢出错误的情况;
备注:这里只介绍了xargs命令不带参数时一些简单用法,xargs带参数的用法请参考其他博客或等待博客更新。