1. 程式人生 > >find命令 如何排除某個目錄

find命令 如何排除某個目錄

find . -path ./src/emacs -prune -o -print  

-a -o和 && || 一樣都有短路性;

實際可以理解為這樣(find condition1 && -prune || -print) find . -path ./src/emacs -a -prune -o -print, 如果find . -path ./src/emacs返回真(就是找到的內容匹配),那接著執行-prune進行忽略處理,由於短路原因跳過-print; 如果find . -path ./src/emacs返回假(就是說找到的內容不匹配),由於短路原因就會跳過-prune來執行-print,打印出這些不匹配的內容;

以此類推,不滿足條件1,2,3而滿足條件4的語句就該是這樣的:

find condition1 -prune -o condition2 -prune -o condition3 -prune -o condition4 -print

應用舉例:

紅色部分作用是排除.repo .git目錄,綠色部分作用是限制找到的檔案字尾必須是.c/.cc/.cpp/.h,藍色作用是將輸出的結果的間隔符號換成‘\0'(以便處理檔名稱中包含空格的情況),紫色部分將結果作為grep的輸入(-0代表以’\0'作為間隔符),最後grep找到引數中要求的字元並且用顏色標記,加上行號。

  1. function cgrep()  
  2. {  
  3.     find . -name .repo -prune -o -name .git -prune -o -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.h' \)-print0 | xargs -0grep --color -n "[email protected]"