您好,登錄后才能下訂單哦!
find命令詳解
大家或多或少使用過windows的文件查找,針對整個文件系統、部分分區,以文件名、時間等條件來進行文件查找。在Linux中主要通過locate和find這兩個命令,來完成對文件查找。
首先,簡單講一下locate和find這兩個命令的適應場景和各自特點。locate和find在Linux中都可以實現基于文件系統查找符合條件的文件,卻有各自的特點和使用場景。locate命令在文件系統上實現文件查找,是基于事先構建好的搜索數據庫來完成的。locate命令通過搜索數據庫,而不是每次查找都遍歷指定的文件系統,因此,可以快速的檢索查找統計出符合條件的文件。
locate命令搜索查找的是數據庫,數據庫中有的文件,可以快速的查找,數據庫中還未更新的,則無法查找到,因此通過locate命令查找文件,是非實時的查找,最近創建的文件還未在數據庫中建立相關的索引等信息,無法查找到。
locate有兩種更新搜索數據庫的方法:
1、系統制定的計劃任務,搜索遍歷整個根文件系統,來自動完成數據庫的更新
2、updatedb命令,手動更新數據庫
因此,locate命令適用于非實時的、模糊的、快速查找
locate命令基本用法:
locate [option]...[pattern]...
常用選項:
-h 幫助信息
-i 忽略大小寫
-c 統計共有多少符合條件的文件
-b 只顯示匹配路徑中的基名
-r 支持使用正則表達式來匹配pattern
一般,在Linux中locate命令查找文件,使用較少,多使用find命令,實現實時精確的文件查找。
find命令詳解
find查找命令,是通過遍歷指定的文件系統,匹配查找模式來完成查找,是實時的、精確查找。
find命令的基本用法:
find [option]...[查找文件路徑] [查找條件] [查找后的處理動作]
常用選項:一般使用較少
查找文件路徑:查找文件的起始路徑,默認是當前工作目錄
查找條件:指定的查找標準,可以是文件名、文件的大小、文件的類型、權限、從屬關系、時間戳等標準來查找,默認為查找指定路徑下的所有文件。
處理動作:對符合條件的文件作出操作,默認為標準輸出。
備注:find查找文件,默認是glob文件名通配,而非正則表達元字符通配
查找條件:
-name "pattern" 根據文件名來查找文件
-iname "pattern" 根據文件名查找文件,忽略大小寫
實例:
#find /etc -name pass* #在/etc目錄下查找文件名以pass開頭的文件
#find / -name pass* #在根目錄下查找文件名以pass開頭的文件
-regex "pattern" 根據正則表達式匹配查找
在find中使用較少,正則表達式工作在貪婪模式下,匹配的是整個路徑而非基名
-user username 查找屬主為指定用戶的文件
-group groupname 查找屬組為指定組的文件
-uid UID 查找屬主為指定UID的文件
-gid GID 查找屬組為指定GID的文件
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
組合測試:
與:-a 默認組合邏輯
或:-o
非:-not或!
備注:組合測試時如用括號需轉義 \( \)
-type TYPE 根據文件類型查找
f普通文件 d目錄 l鏈接文件 b塊設備 c字符設備文件 p管道 s套接字
-size [+|-]#單位 根據文件大小來查找
常用單位:k M G
備注:-size 3M:查找出來的文件是滿足小于4M大于2M的范圍的文件
-size +3M:查找的是4M及大于4M的文件
-size -3M:查找的是2M及小于2M的文件
根據時間戳查找
以天為單位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
以分為單位
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
實例:#find /etc -mtime -7 #查找7天內修改過的文件
根據權限查找
-perm [/|-]mode
備注:-perm mode:精確匹配權限位
-perm /mode:任意一類用戶(u,g,o)的任何權限位,任何一個符合條件即滿足(9個權限位只要有一個滿足即可,是或的邏輯關系)
-perm -mode:每一類用戶(u,g,o)的權限位(r,w,x)的每一位,同時符合條件即滿足(9個權限位之間是與的邏輯關系)
實例:#find /etc -not -perm /222 -type f #查找所有用戶都沒有寫權限的文件
處理動作:
-print 輸出至標準輸出,默認動作
-ls 類似于對查找到的文件執行"ls -l"命令,輸出文件的詳細信息
-delete 刪除查找到的文件
-fls /path/to/file 把查找到的所有文件的長格式信息保存至指定的文件中
-ok command {} \; 對查找到的每個文件都交給command來執行,每個文件執行都要用戶確認
-exec command {} \; 對查找到的每個文件都交給command來執行,不需要用戶確認
備注:find查找到的文件路徑傳給后面的command,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令,但是有些command不能接受過長的參數,此時command執行會失敗。另有一種方式可以規避此問題:#find ... | xargs command
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。