2011-08-05 23 views
5

我正在使用-print0來修改find​​的輸出以使用NULL結束符而不是換行符。但是,當使用find的-o(OR)函數時,我無法使其工作。使用-print0和-o在find中

這工作得很好,它打印出這可能是沒有被用戶「彼得」擁有或不按組「www數據」擁有的文件的換行分隔的列表:

find . ! -user pieter -o ! -group www-data 

但是,當我追加-print0這個我沒有得到任何輸出了:

find . ! -user pieter -o ! -group www-data -print0 

然而,這工作得很好:

find . ! -user pieter -print0 

什麼我我米伊辛?我嘗試添加不同的括號對,但無濟於事。

+0

我猜這會工作,但未經測試:'發現。 \(!-user pieter -o!-group www-data \)-print0' –

回答

7

你錯過了parens。需要注意的是,你有這樣的外殼經過他們逃脫他們:

find . \(! -user pieter -o ! -group www-data \) -print0 

你可以找到更多關於發現on its man page,尤其是在示例部分。

如果您想知道爲什麼這是必要的,那是因爲order of operations。 find中的每個表達式都返回true或false。如果不在表達式之間加上明確的運算符(-a-o,),則假定爲-a

所以,你原來的命令等效於find . ! -user pieter -o ! -group www-data -a -print0,這隻會評估對用戶pieter擁有的文件print0,但不羣www-data

+0

太好了!這工作。現在我看看你的解決方案,將條件分組在一起,這很有意義。 – pfrenssen