print0 && xargs

awk和sed之前看过,好久不用又忘记了,也没有总结,所以要学习还得再上网找资料,索性自己来总结一下。-print0和xargs之前一直在用,但是模模糊糊,一知半解,今天一并解决。

##-print

  1. -print是find命令的一个参数,别的命令是没有的(我没见过,说错了请大家指正)
  2. -print0是-print的一个形态,也可以不加最后的0

-print指明打印出匹配文件的文件名。当使用-print时,’\n’作为用于输出的文件名进行分隔。

-print0指明使用’\0’作为匹配的文件名之间的定界符。

##xargs

我们可以用管道将一个命令的stdout重定向到另一个命令的stdin。例如:

command | grep "text"

但是有些命令只能以命令行参数的形式接受数据,而无法通过stdin接受数据流。在这种情况下,我们无法用管道来提供哪些只有通过命令行参数才能提供的数据。

只是就只能另辟蹊径了。该xargs命令上场了,他擅长将标准输入数据转换成命令行参数。xargs能够处理stdin并将其转换成特定命令的命令行参数。xargs也可以将单行或多行文本输入转换成其他格式,例如单行变多行或多行变单行。

xargs应该紧跟在管道操作符之后,以标注输入作为主要的原数据流

command | xargs 

例如:删除path路径下的所有文件

rm `find /path -type f`

如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。

find /path -type f -print0 | xargs -0 rm

xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。

awk和sed的东西比较多,为了避免文章太长,另外写吧