歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux下find命令詳解

Linux下find命令詳解

日期:2017/3/3 12:18:23   编辑:Linux技術

【概述】

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

Copyright © Linux教程網 All Rights Reserved