xargs的作用
xargs命令是用于给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。
它擅长于将标准输入数据转换成功命令行参数能够将管道或者标准输入里的数据转换成特定命令的命令行参数。
xargs也可以将单行或多行文本输入转换成其他格式,例如单行变多行,多行变单行。
xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入会包含换行和空白。不过通过xargs的处理,换行和空白将被空格取代。意思就是说,将一段文本内容传给xargs时,xargs会将其中包含的换行和空白区域都替换成空格。这样的话,文件的内容就不再是多行而是一行。直接看例子:
为什么要把所有的空白和换行都替换成空格呢?因为命令行参数的多个参数之间是用空格隔开的,现在要把这些数据作为命令行参数,那么就必须将它们的不同域之间使用空格隔开。
常见的选项
-n选项,指定 输出时每行输出的列数。
使用xargs后会将文件内容设置成一行,使用-n选项可是使输出时不再是只输出一行,而是以每行显示指定的列数,多行的形式将内容输出。
-d选项,自定义列分割符
将格式化后的字符串作为命令行参数传递个其他命令,组装完成批量任务
-I选项(大写的i),指定一个替换字符串{ },这个字符串在xargs扩展时会被替换掉,当-l与xargs结合使用,每一个参数命令都会被执行一次
-0选项,与print0搭配使用。print0的作用就是让各个文件名不再按照空格作为结束标志,而是以NULL作为结尾的标志。在使用xargs时依然默认是使用空格当做多个文件之间的分割,当使用了print0将文件名之间的分隔符改变了,xargs还不知道,所以,这个-0选项相当于就是用来告诉xargs文件的结束标志已经改成NULL了。这么说可能有的读者不太明白是什么意思,看如下一个场景:
创建一个名为 hello world的文件,文件名中间带有空格,而默认情况下,文件名之间也是使用空格隔开的,如果不做任何处理的话,会创建hello 和 world两个文件而不是一个文件。
使用上边这种方法肯定是可以实现的,但是如果目录里边有很多类似的文件,一个一个这样删除可能就有些低效了,现在学习一种新的方式来处理这种情况,使用xargs结合-0选项来处理。