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

Linux下find命令

/********************************************************
 *Author: Goup
 *
 *Date: 2017-09-06 09:09
 *
 *Description: grep
 *
 ********************************************************/
 
由於locate的非精確查詢和非實時查詢的特性,導致locate用的不多 
find支援實時查詢,擁有眾多查詢選項,是Linux上查詢最常用的,但是缺點也是比較明顯: 如果檔案數量很多的話,查詢起來很慢


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


用法


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


典型的find命令的寫法是:


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

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


選項


1.按檔名查詢


-name 

直接加檔名,且支援檔名通配

iname 
類似於-name, 但是匹配檔名時不去分大小寫

-regex 
正則表示式匹配檔名

example:
find . -name "vim*" -ls 

查詢當前目錄下所有以vim開頭的檔案,並顯示其詳細資訊 

find . -iname "vim*" -ls 

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

2.按檔案型別查詢


-type 檔案屬性

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

example:

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

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

3.按檔案所屬組/owner查詢


-gidGID
-uidUID
-userUSER
-groupGROUP
-nouser
-nogroup

exmaple:


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

4.按檔案大小查詢


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

example:


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

5.按檔案的修改時間等查詢


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

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


example:


find . -atime -1 -ls 
顯示當前目錄下所有在兩天以內訪問過得檔案的詳細資訊 

find . -cmin +10 -ls 
顯示當前目錄下所有超過10min沒有改變過的檔案的詳細資訊

6.按檔案許可權查詢


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

example:


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

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

7.組合查詢


-a: and 
-o: or 
-not:

example:


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

8.後繼命令


-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 {} \; 
找出當前目錄下所有的普通檔案並顯示檔案行數(無需確認)