1. 程式人生 > >find命令的基礎用法以及按檔案修改時間查詢檔案

find命令的基礎用法以及按檔案修改時間查詢檔案

一般檔案查詢方法:

find 命令學好是一件很有趣的事情,也可以幫你在查詢系統檔案的時候事倍功半,還可以與正則表示式結合使用,功能強大,是一個很好的查詢工具。可以整體提高你的系統管理能力。

基礎用法

1.  find /home -name file  ,  在/home目錄下查詢檔名為file的檔案
2.  find /home -name '*file*'  ,  在/home目錄下查詢檔名包含file的檔案
3.  find /home -name 'file*'  ,  在/home目錄下查詢以file開頭的檔名的檔案
4.  find /home -size 512k  ,    在/home目錄下查詢512kb大小的檔案

5.  find /home -size +1000k , 在/home目錄下查詢大於1000kb的檔案
6.  find /home -size -1000k  , 在/home目錄下查詢小於1000kb的檔案
7.  find /home -size +1000k -ls | less  , 在/home目錄下查詢大於1000kb的檔案,並且用less命令的形式顯示詳細資訊

根據檔案的特徵查詢方法:

8.  find / -amin -10   , 查詢在系統中最後10分鐘訪問的檔案
9.  find / -atime -2  ,  查詢在系統中最後48小時訪問的檔案
10. find / -empty  ,  查詢在系統中為空的檔案或者資料夾
11. find / -group cat , 查詢在系統中屬於 groupcat的檔案

12. find / -mmin -5  , 查詢在系統中最後5分鐘裡修改過的檔案
13. find / -mtime -1  ,  查詢在系統中最後24小時裡修改過的檔案
14. find / -nouser   ,  查詢在系統中屬於作廢使用者的檔案
15. find / -user rachel  ,  查詢在系統中屬於rachel這個使用者的檔案

使用混合查詢方式查詢檔案:

16. find /tmp -size +10000000c -and -mtime +2  , 在/tmp目錄中查詢大於100000000位元組並且在48小時內修改的某個檔案
17. find /tmp -size +10000000c -or -mtime +2  , 在/tmp目錄中查詢大於100000000位元組或者在48小時內修改的某個檔案

18. find /tmp ! -user rachel  ,  在/tmp目錄中查詢所有不屬於rachel的檔案 

======================

另一個地方摘錄過來的:

find / -amin -10 # 查詢在系統中最後10分鐘訪問的檔案 

  find / -atime -2 # 查詢在系統中最後48小時訪問的檔案

  find / -empty # 查詢在系統中為空的檔案或者資料夾

  find / -group cat # 查詢在系統中屬於 groupcat的檔案

  find / -mmin -5 # 查詢在系統中最後5分鐘裡修改過的檔案

  find / -mtime -1 #查詢在系統中最後24小時裡修改過的檔案

  find / -nouser #查詢在系統中屬於作廢使用者的檔案

  find / -user fred #查詢在系統中屬於FRED這個使用者的檔案

  下面的列表就是對find命令所可以指定檔案的特徵進行查詢的部分條件。在這裡並沒有列舉所有的查詢條件,參考有關Linux有關書籍可以知道所有find命令的查詢函式。

  -amin n

  查詢系統中最後N分鐘訪問的檔案

  -atime n

  查詢系統中最後n*24小時訪問的檔案

  -cmin n

  查詢系統中最後N分鐘被改變狀態的檔案

  -ctime n

  查詢系統中最後n*24小時被改變狀態的檔案

  -empty

  查詢系統中空白的檔案,或空白的檔案目錄,或目錄中沒有子目錄的資料夾

  -false

  查詢系統中總是錯誤的檔案

  -fstype type

  查詢系統中存在於指定檔案系統的檔案,例如:ext2 .

  -gid n

  查詢系統中檔案數字組 ID 為 n的檔案

  -group gname

  查詢系統中檔案屬於gnam檔案組,並且指定組和ID的檔案

  Find命令的控制選項說明:

  Find命令也提供給使用者一些特有的選項來控制查詢操作。下表就是我們總結出的最基本,最常用的find命令的控制選項及其用法。

  選項

  用途描述

  -daystart

  .測試系統從今天開始24小時以內的檔案,用法類似-amin

  -depth

  使用深度級別的查詢過程方式,在某層指定目錄中優先查詢檔案內容

  -follow

  遵循萬用字元連結方式查詢; 另外,也可忽略萬用字元連結方式查詢

  -help

  顯示命令摘要

  -maxdepth levels

  在某個層次的目錄中按照遞減方法查詢

  -mount

  不在檔案系統目錄中查詢, 用法類似 -xdev.

  -noleaf

  禁止在非UNUX檔案系統,MS-DOS系統,CD-ROM檔案系統中進行最優化查詢

  -version

  列印版本數字

  使用-follow選項後,find命令則遵循萬用字元連結方式進行查詢,除非你指定這個選項,否則一般情況下find命令將忽略萬用字元連結方式進行檔案查詢。

  -maxdepth選項的作用就是限制find命令在目錄中按照遞減方式查詢檔案的時候搜尋檔案超過某個級別或者搜尋過多的目錄,這樣導致查詢速度變慢,查詢花費的時間過多。例如,我們要在當前(.)目錄技巧子目錄中查詢一個名叫fred的檔案,我們可以使用如下命令

  find . -maxdepth 2 -name fred

  假如這個fred檔案在./sub1/fred目錄中,那麼這個命令就會直接定位這個檔案,查詢很容易成功。假如,這個檔案在./sub1/sub2/fred目錄中,那麼這個命令就無法查詢到。因為前面已經給find命令在目錄中最大的查詢目錄級別為2,只能查詢2層目錄下的檔案。這樣做的目的就是為了讓find命令更加精確的定位檔案,如果你已經知道了某個檔案大概所在的檔案目錄級數,那麼加入-maxdepth n 就很快的能在指定目錄中查詢成功。

  使用混合查詢方式查詢檔案

  find命令可以使用混合查詢的方法,例如我們想在/tmp目錄中查詢大於100000000位元組並且在48小時內修改的某個檔案,我們可以使用-and 來把兩個查詢選項鍊接起來組合成一個混合的查詢方式。

  find /tmp -size +10000000c -and -mtime +2

  學習過計算機語言的朋友都知道,在計算機語言裡,使用and ,or 分別表示“與”和“或”的關係。在Linux系統的查詢命令中一樣通用。

  還有這樣的例子,

  find / -user fred -or -user george

  我們可以解釋為在/tmp目錄中查詢屬於fred或者george這兩個使用者的檔案。

  在find命令中還可以使用“非”的關係來查詢檔案,如果我們要在/tmp目錄中查詢所有不屬於panda的檔案,使用一個簡單的

  find /tmp ! -user panda

  命令就可以解決了。很簡單。

  查詢並顯示檔案的方法

  查詢到某個檔案是我們的目的,我們更想知道查詢到的檔案的詳細資訊和屬性,如果我們採取現查詢檔案,在使用LS命令來檢視檔案資訊是相當繁瑣的,現在我們也可以把這兩個命令結合起來使用。

  find / -name "httpd.conf" -ls

  系統查詢到httpd.conf檔案後立即在螢幕上顯示httpd.conf檔案資訊。

  12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

  下面的表格就是一些常用的查詢檔案並顯示檔案資訊的引數和使用方法

  選項

  用途描述

  -exec command;

  查詢並執行命令

  -fprint file

  列印檔案完整檔名

  -fprint0 file

  列印檔案完整檔名包括空的檔案

  -fprintf file format

  列印檔案格式

  -ok command;

  給使用者命令執行操作,根據使用者的Y 確認輸入執行

  -printf format

  列印檔案格式

  -ls

  列印同種檔案格式的檔案.

按檔案修改時間查詢檔案

查詢兩天前修改過的檔案:
find . -type f -mtime -2

查詢3天內修改過的檔案:
find -ctime -3

find命令使用超過6天,空檔案獨立查詢命令:
find /data/backup -ctime +6 -exec rm -f {} \;   刪除/data/backup目錄下修改時間超過6天的檔案。 
find /data/backup -type d -empty -exec rmdir {} \; >/dev/null 2>&1  刪除/data/backup目錄下空的資料夾,同時輸出正確和錯誤資訊到空。

查詢超過6天且是空檔案的find命令:
find ./ -type d -empty -ctime +6

按修改時間來查詢檔案,要用到選項-mtime:
find /home/admin -mtime -1      #查詢/home/admin目錄下修改時間在1天之內的檔案
find /home/admin -name *.txt -mtime -1  #查詢/home/admin目錄下修改時間在1天之內的檔名為.txt結尾的檔案

find 按檔案修改時間查詢檔案
---(+n)----------|----------(n)----------|----------(-n)---
      (n+1)*24H前|   (n+1)*24H~n*24H間   |n*24H內

-ctime -n    查詢距現在 n*24H 內修改過的檔案
-ctime n    查詢距現在 n*24H 前, (n+1)*24H 內修改過的檔案
-ctime +n    查詢距現在 (n+1)*24H 前修改過的檔案

[a|c|m]min    [最後訪問|最後狀態修改|最後內容修改]min
[a|c|m]time    [最後訪問|最後狀態修改|最後內容修改]time

linux 檔案的三種時間(以 find 為例):
atime 最後一次訪問時間, 如 ls, more 等, 但 chmod, chown, ls, stat 等不會修改些時間, 使用 ls -utl 可以按此時間順序檢視;
ctime 最後一次狀態修改時間, 如 chmod, chown 等狀態時間改變但修改時間不會改變, 使用 stat file 可以檢視;
mtime 最後一次內容修改時間, 如 vi 儲存後等, 修改時間發生改變的話, atime 和 ctime 也相應跟著發生改變.

注意:
linux 裡是不會記錄檔案的建立時間的,除非這個檔案自建立以來沒有發生改變,那麼它的建立時間就是它的最後一次修改時間。
#ls -lt /home/admin   # 按修改時間順序檢視
#ls -lut /home/admin  # 按訪問時間順序檢視
(如果想反序檢視的話需要加一個選項 -r)