2021-05-12 14:32:11
Linux搜尋命令---find
強大的find命令在Linux中是用來在指定目錄下查詢檔案的,對於find命令來說任何位於引數之前的字串都將被視為將要被查詢的目錄名,而如果使用該命令時,不設定任何引數,則find命令將預設在當前目錄下查詢子目錄與檔案,並且將查詢到的子目錄和檔案全部進行顯示。
一、find 命令格式 (即語法)
1、find命令的一般形式為:
# find 查詢路徑名 -options [-print -exec -ok ...]
*查詢路徑名:指定具體的目標路徑,不指定預設為當前目錄。
*options(查詢條件):指定的查詢標準,可以為檔名、大小、型別、許可權等標準,預設為找出指定路徑下的檔案
*處理動作:對符合的檔案做操作,預設列印輸出至螢幕。
例如:請在當前目錄下查詢以“.txt”結尾的檔案,操作如下:
在指定了路徑"/app"的情況下,find命令就可以把查詢到的結果“help.txt”列印到螢幕。
2、find命令的引數:
# pathname: 在find命令所查詢的目錄路徑中,可以用.來表示當前目錄,用/來表示系統根目錄。
find命令不僅可以用絕對路徑進行查詢,同時也可以用相對路徑進行查詢,那麼在“/app”下查詢以“.txt”結尾的檔案,我們也可以用相對路徑來做,操作如下:
注意:其中“.”代表當前,而不輸入路徑則預設為當前。
# -exec: find命令對匹配的檔案執行該引數所給出的shell命令時,相應命令的形式為"command { } ; ",這裡要注意"{ }"和“;”之間的空格。
# -ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。
二、find命令工作特點
1、 優點:
#實時查詢
#精確查詢,搜尋整個目錄下所有檔案
#可以對查詢到的檔案驚喜指定動作,即檢視、刪除、移動等等。
2、缺點:
#查詢速度太慢
三、find命令的使用
我們可以把查詢條件想象的分為兩類,即選項和測試條件
1、find命令選項
#指定目錄的查詢範圍
* -mindepth N 最小搜尋深度
* -maxdepth N 最大搜尋深
* -mindepth N -maxdepth N 只搜尋指定深度
舉例說明一下,我們都知道find命令是預設遞回,如果我們不指定深度的話,它會預設把包含查詢條件的所有子檔案中也列出,比如:
我們可以看到在"/app"路徑下一、二、三、四、五級都包含“hello”,那如果我們直接查詢,"find"就把所有檔案都列出,但如果我們只要第三級目錄下“hello”檔案呢,所以我們需要給"find"指定一個深度,操作如下:
這樣我們就可以得到第三級“/app/1/2”中的“hello”檔案
#查詢空檔案
* -empty 查詢內容為空的檔案,這個比較簡單直接接到“find”命令後就可以,操作如下:
注意:如果不加路徑,"find”命令同樣會預設為當前目錄。
2、 find命令測試條件
#根據檔名進行查詢
* -name "檔名”以檔名進行查詢,支援使用glob
* -iname "檔名” 按檔名不區分大小寫查詢,只支援glob風格的查詢方式:*,[],[^],?
* -regex "檔名”基於正規表示式查詢檔案,正則部分要用引號引起來,同時要表示檔案的完整路徑,搜尋當前目錄時,用./,搜尋指定目錄時如/app,則用/app/.... ,例如,在當前目錄下把所有以“r..t”開頭“.sh”結尾的檔案列出,操作如下:
* -inum inode號 以inode號為查詢條件
* -samefile name 找出與name inode相同的檔案
* -links n 找到硬連結數為n的檔案
#根據檔案從屬關係進行查詢
* -user 使用者名稱:查詢屬主為指定使用者(UID)的檔案
* -group 組名 :查詢屬組為指定組(GID)的檔案
* -uidUserID:查詢屬主為指定的UID號的檔案
* -gidGroupID:查詢屬組為指定的GID號的檔案
* -nouser:查詢沒有屬主的檔案
* -nogroup:查詢沒有屬組的檔案
具體操作如下:
#根據檔案型別進行查詢 -type "型別”
* f: 普通檔案
* d: 目錄檔案
* l: 符號連結檔案
* s:通訊端檔案
* b: 塊裝置檔案
* c: 字元裝置檔案
* p: 管道檔案
#根據檔案大小進行查詢
* -size [+|-]#UNIT 常用單位:k, M, G,c(byte) 注釋: #UNIT: (#-1, #] ,如6k表示(5k,6k];+#UNIT :(#,∞) ,如+6k表示(6k,∞);-#UNIT:[0,#-1] ,如-6k 表示[0,5k]。
具體操作如下:
#根據時間進行查詢
* -atime[+|-]time/-amin[+|-]time 以存取時間(天/分鐘)查詢
* -mtime[+|-]time/-mmin[+|-]time 以資料修改時間(天/分鐘)查詢
* -ctime[+|-]time/-cmin[+|-]time 以後設資料修改時間(天/分鐘)查詢
具體操作如下:
#根據檔案許可權進行查詢
* -perm MODE 精確許可權匹配
* -perm /MODE :任何一類(u,g,o)物件的許可權中只要能一位匹配即可,相互之間表示或的關係,"+"等同於“/”,但“+” 從CentOS7開始淘汰
* -perm -MODE :每一類物件都必須同時擁有指定許可權,相互之間表示與的關係
#組合條件測試
* 內容包含 與:-a 或:-o 非: -not
* 德 摩根定律:
非(A且B)=(非A)或(非B); 非 (A或B)=(非A)且(非B)
3、 處理動作
# -print (預設) 查詢的結果列印到終端
# -ls 查詢的結果顯示詳細資訊,以長檔案的格式輸出
# -delete 將查詢的結果刪除,不互動
# -ok shell command {} ; 查詢到的檔案傳遞給COMMAND命令,提每步都給使用者提示確認操作(互動執行shell命令)
# -exec shell command {} ; 查詢到的檔案傳遞給COMMAND命令,直接修改完成,不給使用者確認(非互動執行shell命令)
# 注意:find將查詢到的檔案路徑一次性傳遞給後面的命令,但有很多命令不能接受過長的引數,從而將會導致命令執行失敗,所以有時我們需要借助xargs命令,來幫助我們進行引數的傳遞,例如 :
[root@centos6 ~]# find /etc -type f | xargs -i {} cp/app/tmp -i引數是由find命令的結果傳給xargs命令的,並且由-i指定結果代替符 {}。
到這裡為止我們已經學習完了關於“find”命令的使用方法,也列出了很多常用的命令選項,如果我們能熟練掌握了它們,那麼以後在linux中查詢檔案也將會是一件很容易的事情。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-08/153386.htm
相關文章