【概述】
find命令是Linux中一個很強大的查找命令,用於在目錄結構中搜索文件並執行指定操作。只要具有相應的權限,即使系統中含有網絡文件系統(NFS),find 命令在該文件系統中同樣有效。由於find命令功能強大,常被用來在大文件系統中查找文件,這會話費很長時間,所以人們更傾向於把它放在後台執行。接下來我們看看find命令的具體用法。
【1】命令格式find pathname -options[-print -exec -ok ...]
find 查找路徑 -命令參數
【2】命令功能find命令用於在文件樹中查找文件,並做出相應的處理,這個過程中有可能會訪問磁盤
【3】命令參數pathname:find命令所查找的目錄路徑
例如用.來表示當前目錄,用/來表示系統根目錄
-print:find命令將匹配的文件輸出到標准輸出
-exec:find命令對匹配的文件執行該參數所給出的shell命令
相應命令的形式為'command' { } \;(注意{ }和\之間有空格)
-ok:和-exec的作用相同,只不過以一種更安全的模式來執行該參數所給出的shell命令
在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行
【4】命令選項1.根據時間查找文件 -atime/-ctime/-mtime/-newer/-anewer/-used
-atime -n +n 按文件訪問時間來查找文件,-n指n天以內,+n指n 天以前
-ctime -n +n 按文件創建時間來查找文件,-n指n天以內,+n指n 天以前
-mtime -n +n 按文件更改時間來查找文件,-n指n天以內,+n指n 天以前
-newer file1 ! file2 查找更改時間比文件file1新但比文 件file2舊的文件
eg.
-amin -10 // 查找在系統中最後10分鐘訪問的文件
-amin +30 // 查找最近30分鐘前被存取過的文件
-atime -2 // 查找在系統中最後48小時訪問的文件
-atime -1 // 查找1天之內被存取過的文件
-mmin +60 // 查找60分鐘前改動過的文件
-mmin -5 // 查找在系統中最後5分鐘裡修改過的文件
-mtime -2 // 查找最近兩天內改動過的文件
-mtime -1 // 查找在系統中最後24小時裡修改過的文件
-newer tmp.txt // 查找更新時間比tmp.txt近的文件或目錄
-anewer tmp.txt // 查找存取時間比tmp.txt近的文件或目錄
-used -2 //列出文件或目錄被改動過之後,在2日內被存取過的文件或目錄
由此可以看出,min是分鐘,time是小時,a訪問,c改變狀態,m改變數據
2.根據文件名查找文件 -name-name filename 查找名為filename的文件
eg.
-name "*.txt" // 查找.txt文件並顯示
-name "[A-Z]*" // 查找以大寫字母開頭的文件
-name "host*" // 查找以host開頭的文件
-name "[a-z][a-z][0–9][0–9].txt" // 查找以兩個小寫字母和兩個數字開頭的txt文件
-name april* // 查找以april開始的文件
-name april* fprint file // 查找以april開始的文件,並把結果輸出到file中
-name ap* -o -name may* // 查找以ap或may開頭的文件
-name tom.txt -ftype vfat // 查找名稱為tom.txt且文件系統類型為vfat的文件
-name t.txt ! -ftype vfat // 查找名稱為tom.txt且文件系統類型不為vfat的文件
-name wa* -type l // 查找名為wa開頭且類型為符號鏈接的文件
3.根據文件權限查找文件 -perm-perm 按執行權限來查找
eg.
-perm 700 // 查找權限為700的文件或目錄
-perm 777 // 查找所有用戶都可讀寫執行的文件
4.根據文件屬主查找文件 -user/nouser-user username 按文件屬主來查找
eg.
find / -user fred // 查找在系統中屬於FRED這個用戶的文件
find /home -user cnscn // 列出/home目錄內屬於用戶cnscn的文件或目錄
find /home -nouser // 列出/home內不屬於本地用戶的文件或目錄
5.根據文件所屬組查找文件 -group/-nogroup-group groupname 按文件所屬組來查找
eg.
find / -group cat // 查找在系統中屬於 groupcat的文件
find /home -group cnscn // 列出/home內組為cnscn的文件或目錄
find /home -nogroup // 列出/home內不屬於本地組的文件或目錄
6.根據文件類型查找文件 -tpye-type b /d /c /p /l /f /s 查找是塊設備、目錄、字符設備、管道、符號鏈接、普通、socket文件
eg.
-type d // 查找當前目錄下的目錄
-type c // 查找當前目錄下的字符設備文件
-type l // 查找當前目錄下的符號鏈接文件
7.根據文件大小查找文件 -size-size n[c] 查找長度為n塊[或n字節]的文件
eg.
-size +1000000ct // 查找長度大於1Mb的文件
-size 100ct // 查找長度為100c的文件
-size +10 // 查找長度超過期作廢10塊的文件(1塊=512字節)
-size +512k // 查找大於512k的文件
-size -512k // 查找小於512k的文件
當然了,find命令也可以和其他的命令一起復合使用,例如:
a.查當前目錄下的所有普通文件
# find . -type f -exec ls -l {} \;
b.在/ l o g s目錄中查找更改時間在5日以前的文件並刪除 $ find logs -type f -mtime +5 -exec -ok rm {} \;
c.查詢當天修改過的文件 [root@book class]# find ./ -mtime -1 -type f -exec ls -l {} \;
d.查詢文件並詢問是否要顯示 [root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? y
-rw-r–r– 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? n
[root@book class]#
e.比如要查找磁盤中大於3M的文件: find . -size +3000k -exec ls -ld {} ;
f.將find出來的東西拷到另一個地方
find *.c -exec cp ‘{}’ /tmp ‘;’
g.查找2004-11-30 16:36:37時更改過的文件 # A=`find ./ -name "*php"` | ls -l –full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"本文出自 “CLOWN” 博客,請務必保留此出處http://clown5.blog.51cto.com/10730975/1775882