1. 程式人生 > >linux find 命令忽略某個或多個子目錄的方法

linux find 命令忽略某個或多個子目錄的方法

在linux find 進行查詢的時候,有時候需要忽略某些目錄不查詢,可以使用 -prune 引數來進行過濾,但必須要注意要忽略的路徑引數必須緊跟著搜尋的路徑之後,否則該引數無法起作用。

以下是指定搜尋/home/carryf目錄下的所有檔案,但是會忽略/home/carryf/astetc的路徑:

find /home/carryf -path "/home/carryf/astetc" -prune -o -type f -print

如果按照檔名來搜尋則為:

find /home/carryf -path "/home/carryf/astetc" -prune -o -type f -name "cdr_*.conf" -print

如果要忽略兩個以上的路徑如何處理?

find /home/carryf /( -path "/home/carryf/astetc" -o -path "/home/carryf/etc" /) -prune -o -type f  -print

find /home/carryf /( -path "/home/carryf/astetc" -o -path "/home/carryf/etc" /) -prune -o -type f  -name "cdr_*.conf" -print

注意/( 和/) 前後都有空格。

 查詢某個檔案包含內容,下面這個語句可以解決目錄帶空格的問題:

find ./ -name "mysql*" -print0  |xargs -0 grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"

如果目錄不帶空格,那麼可以如下面的形式執行:

find ./ -name "mysql*"  |xargs  grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"