Linux find命令忽略目錄的查找方法


在Linux操作系統中,find命令非常強大,在文件與目錄的查找方面可謂無所不至其極,如果能結合xargs命令使得,更是強大無比。

 

以下來看看find命令忽略目錄查找的用法吧。

 

例1,根據文件屬性查找:

 

find . -type f -name "*config*" ! -path "./tmp/*" ! -path "./scripts/*" ! -path "./node_modules/*"

 

Explanation:

find . - Start find from current working directory (recursively by default) 

-type f - Specify to find that you only want files in the results 

-name "*_peaks.bed" - Look for files with the name ending in _peaks.bed 

! -path "./tmp/*" - Exclude all results whose path starts with ./tmp/ 

! -path "./scripts/*" - Also exclude all results whose path starts with ./scripts/

 

例2,根據文件內容查找:

 

grep -n -r --exclude-dir='node_modules' --exclude-dir='logs' --exclude="nohup.out" 192 *

 

使用find命令在linux系統中查找文件時,有時需要忽略某些目錄,可以使用 -prune 參數來進行過濾。不過必須注意:要忽略的路徑參數要緊跟着搜索的路徑之后,否則該參數無法起作用。

 

例如:指定搜索/home/zth目錄下的所有文件,但是會忽略/home/zth/astetc的路徑:

 

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

 

按照文件名來搜索則為:

 

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

 

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

 

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

 

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

 

注意:\( 和 \) 前后都有空格。

示例:

checkButExcludeIgnorePath.sh 腳本

#!/bin/bash
IgnorePath=""

# 命令 sed 's/\/$//' paths.ignore  是去除 paths.ignore 文件每一行末尾的“/”字符
for line in `sed 's/\/$//' paths.ignore`
do
   # 將 paths.ignore 文件中每一行目錄信息 拼接成 一行
   IgnorePath=" -path ./$line -o "$IgnorePath
done

echo "zzzz:"$IgnorePath

find ./  \( $IgnorePath -path ./out \) -prune -o -type d -name values-zh-rCN -print -o -type d -name values-zh-rHK -print -o -type d -name values-zh-rTW -print  |tee log

 

 

 

查找某個文件包含內容,以下語句可以解決目錄帶空格的問題:

 

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"

 

通過以上的例子,大家應該可以掌握find命令查找文件時,忽略相關目錄的方法了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM