linux " | " 管道实现是将前面的stdout作为后面命令的stdin。
有些命令不接受管道的传递方式,例如ls命令,ls需要传递的是参数,直接使用管道符,有时不能满足传递到命令的参数位。
xargs:处理管道传过来的stdin,将处理后的数据传递到正确位置
-i :如果不使用-i,则默认是将分割处理后的结果整体传递到【命令的最尾部】。但是有时候需要传递到多个位置,不使用-i就不知道传递到哪个位置了。
例如:find ./ -name "*.txt" -type f | xargs -i mv {} /home/maohy/test/
当 “ | ” 管道符传递过来的stdin作为【命令的最后】,直接使用xargs命令可以正常执行
find ./ -name "*.txt" | xargs du -sh
当“ | ” 管道符传递过来的stdin不是作为【命令的最后】,使用xargs 命令输出就会返回异常。
find ./ -name "*.txt" | xargs mv /home/maohy/test/
这时就可以使用 " xargs -i "来指定管道符传递的stdin位置,使用 “{}”大括号来接收stdin
#find ./ -name "*.txt" | xargs -i mv {} /home/maohy/test/
原文:https://blog.51cto.com/13740170/2485697