2012-01-15 91 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