2012-01-15 49 views
3

有人能回答多少进程在每种情况下下面的命令创建为我不理解:解释创建了多少个进程?

以下三个命令有大致相同的效果:

  1. rm $(find . -type f -name '*.o')
  2. find . -type f -name '*.o' | xargs rm
  3. find . -type f -name '*.o' -exec rm {} \;

回答

4
  1. 正好2个过程 - 1个为rm,另一个为find
  2. 3个或更多进程。 1代表find,另一代表xargs,以及一个或多个rmxargs将读取标准输入,并且读取的行数多于可作为参数传递给程序的行数(最大值为ARG_MAX)。
  3. 许多进程,1个为find,另一个为.o,结尾为rm

在我看来,选项2是最好的,因为它正确处理了最大参数限制,并且不会产生太多的过程。不过,我更喜欢使用像这样(与GNU查找和xargs的):

find . -type f -name '*.o' -print0 | xargs -0 rm 

这将终止与\0,而不是一个换行符每个文件名,因为在UNIX文件名可以合法包含换行符。这也正确处理文件名中的空格(更常见)。

+3

我们还有'find -exec rm \ +'这在概念上就像'xargs',但是保存了一个进程。 – tripleee 2012-01-15 18:43:37

+2

怎么样'找到。 -type f -name'* .o'-delete'?这不好吗? – 2012-01-15 19:31:01

+1

@Jaypal:是的,它可以在一个过程中完成所有工作。 – 2012-01-15 20:56:33