Linux下的find命令詳解
這篇部落格講講Linux下檔案查詢的命令:locate
和find
,其中locate很簡單,主要講解find命令
locate
用法
locate to/find/file/name
直接加上需要的檔名就行了,但是locate查詢的可能是不精確的,甚至可能找不到你需要的
因為locate實際是查詢檔案資料庫,所以速度很快,但是是非精確匹配的,另外如果你剛建立的檔案想要查詢的話,因為資料庫還是沒更新,所以查詢不到
更新檔案資料庫
updatedb
速度非常慢,視你的系統中檔案的多少決定
find
由於locate
的非精確查詢和非實時查詢的特性,導致locate用的不多
find
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 {} \;
找出當前目錄下所有的普通檔案並顯示檔案行數(無需確認)