2012-08-01 89 views
0

我正在使用下面的腳本作爲清理腳本。查找部分返回正確的結果,但由於某些原因,-exec部分不能運行。爲什麼不運行--exec運行?

find /users/rhysparker/downloads/ -maxdepth 1 -iname \*.pkg -o -iname \*.app -o -iname \*.dmg -exec mv {} /folder/location/ \; 

任何幫助,將不勝感激。

回答

3

-o操作具有低優先級,因此您的-exec僅限於*.dmg測試。使用括號將語句正確分組。 (並引用它們以使shell將它們傳遞給find)。

find /users/rhysparker/downloads/ -maxdepth 1 \(-iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \; 
+0

Alan再次襲擊。感謝那。我應該想到這一點。乾杯。 – Rhys 2012-08-01 01:04:01

0

expr1 -o expr2,如果expr1是真,expr2將不進行評估。

在您的命令:

-iname \*.pkg OR 
-iname \*.app OR 
-iname \*.dmg AND -exec mv {} /folder/location/ \; 

如果前兩個條件之一爲真,最後將無法進行評估。所以,你必須使用()改變EXPR:現在

find /users/rhysparker/downloads/ -maxdepth 1 \(-iname \*.pkg -o -iname \*.app -o -iname \*.dmg \) -exec mv {} /folder/location/ \; 

,就變成:

(-iname \*.pkg OR -iname \*.app OR -iname \*.dmg) AND 
-exec mv {} /folder/location/ \; 

這保證當發現文件的-exec進行評估。