1. 程式人生 > >Linux下的find命令詳解

Linux下的find命令詳解

這篇部落格講講Linux下檔案查詢的命令:locatefind,其中locate很簡單,主要講解find命令

locate

用法

locate to/find/file/name

直接加上需要的檔名就行了,但是locate查詢的可能是不精確的,甚至可能找不到你需要的
因為locate實際是查詢檔案資料庫,所以速度很快,但是是非精確匹配的,另外如果你剛建立的檔案想要查詢的話,因為資料庫還是沒更新,所以查詢不到

更新檔案資料庫

updatedb

速度非常慢,視你的系統中檔案的多少決定

find

由於locate的非精確查詢和非實時查詢的特性,導致locate用的不多
find

支援實時查詢,擁有眾多查詢選項,是Linux上查詢最常用的,但是缺點也是比較明顯: 如果檔案數量很多的話,查詢起來很慢

whatever,find依然是最有用且最常用的Linux查詢命令

用法

find支援檔名的正則表示式查詢,按檔案修改時間查詢,按檔案大小查詢,按檔案許可權查詢,按檔案型別查詢等,查詢到以後還支援直接對查詢到的檔案使用命令,功能非常強大

典型的find命令的寫法是:

find 查詢路徑 查詢的標準 查詢到之後的動作

比如: find /home -type d -ls
意思是: 找出/home/下所有的目錄,並顯示目錄的詳細資訊

選項

按檔名查詢

  • -name
    直接加檔名,且支援檔名通配
  • iname
    類似於-name, 但是匹配檔名時不去分大小寫
  • -regex
    正則表示式匹配檔名

example:

find . -name "vim*" -ls
查詢當前目錄下所有以vim開頭的檔案,並顯示其詳細資訊
find . -iname "vim*" -ls
查詢當前目錄下所有以vim開頭的檔案(不區分大小寫),並顯示其詳細資訊

按檔案型別查詢

  • -type 檔案屬性
  • d: 目錄
  • f: 普通檔案
  • l: 連結檔案(link)
  • s: socket檔案
  • p: 管道檔案(pipe)
  • b: 塊裝置檔案
  • c: 字元裝置檔案

example:

find . -type d -ls
顯示當前目錄下所有的目錄的詳細資訊
find . -type l -ls
顯示當前目錄下所有的連結檔案的詳細資訊

按檔案所屬組/owner查詢

  • -gid GID
  • -uid UID
  • -user USER
  • -group GROUP
  • -nouser
  • -nogroup

exmaple:

find . -user gavinzhou -ls
顯示當前目錄下屬於gavinzhou的所有的檔案的詳細資訊

按檔案大小查詢

  • size [+,-][b,k,M,G]

example:

find . -type f -size +1k -ls
顯示當前目錄下所有大於1k的普通檔案的詳細資訊

按檔案的修改時間等查詢

  • ctime: 改變時間(按照天計算)
  • atime: 訪問時間
  • mtime: 修改時間
    -amin: 改變時間(按照分鐘計算)
    -cmin: 訪問時間
    -mmin: 修改時間

使用[+,-]表示[大於,小於]

example:

find . -atime -1 -ls
顯示當前目錄下所有在兩天以內訪問過得檔案的詳細資訊
find . -cmin +10 -ls
顯示當前目錄下所有超過10min沒有改變過的檔案的詳細資訊

按檔案許可權查詢

-perm MODE
/MODE: 任意一位匹配即滿足條件
-MODE: 檔案許可權能完全包含此MODE時才符合條件

example:

find . -perm -644 -ls
顯示當前目錄下檔案許可權的每一位至少包含r-xr–r–的檔案的詳細資訊
find . -perm /464 -ls
顯示當前目錄下檔案許可權的某一位至少包含r–rx-r–的檔案的詳細資訊

組合查詢

-a: and
-o: or
-not:

example:

find . -type d -o -type l -ls
顯示當前目錄下所有目錄和連結檔案的詳細資訊

後繼命令

  • -print: 顯示
  • -ls:類似ls -l的形式顯示每一個檔案的詳細
  • -quit: 查詢到一個就退出
  • -delete: 刪除匹配到的行
  • -ok COMMAND {} \; 每一次操作都需要使用者確認,{}表示引用找到的檔案,是佔位符
  • -exec COMMAND {} \; 每次操作無需確認

example:

find . -type d -delete
刪除當前目錄下的所有目錄
find . -type f -ok wc -l {} \;
找出當前目錄下所有的普通檔案並顯示檔案行數(需確認)
find . -type f -exec wc -l {} \;
找出當前目錄下所有的普通檔案並顯示檔案行數(無需確認)