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"