1. 程式人生 > >linux下的find指令

linux下的find指令

檔案的查詢

在Linux下我們可以用到三個命令來查詢檔案,通常我們都是先使用whereis或者是locate來檢查,如果真的找不到了我們才以find來找。為什麼呢?因為whereis和locate是利用資料庫來查詢資料,所以相當快速,而且並沒有實際查詢硬碟,比較節省時間。但是find是直接查詢硬碟,如果你的硬碟比較老舊的話,就會花費很長的時間。
我們上面說到whereis和locate找不到了才會使用find查詢,所以find是很強大的查詢命令,下面我們看一下find的功能有哪些:
1.命令格式:
find pathname -options [-print -exec -ok …]
2.命令功能:
用於在檔案樹中查詢檔案,並做相應的處理(可能訪問磁碟)
這裡寫圖片描述


3.命令選項:
按照檔名,檔案許可權,檔案所屬查詢
這裡寫圖片描述
-prune 命令的詳解:
(存在目錄dir0和dir1及其子目錄)
1:在除dir0及子目錄以外的目錄下查詢txt字尾檔案

  find ./ -path './dir0*' -a -prune -o -name *.txt -print

說明:-a 應該是and的縮寫,意思是邏輯運算子‘與’(&&); -o應該是or的縮寫,意思是邏輯運算子‘或’(||), -not 表示非.
命令列的意思是:如果目錄dir0存在(即-a左邊為真),則求-prune的值,-prune 返回真,‘與’邏輯表示式為真(即-path ‘./dir0*’ -a -prune 為真),find命令將在除這個目錄以外的目錄下查詢txt字尾檔案並打印出來;如果目錄dir0不存在(即-a左邊為假),則不求值-prune ,‘與’邏輯表示式為假,則在當前目錄下查詢所有txt字尾檔案。
(dir0*表示dir0及其子目錄)
2:在除dir0、dir1及子目錄以外的目錄下查詢txt字尾檔案

 find ./ \( -path './dir0*' -o -path './dir1*' \) -a -prune -o -name *.txt -print

注意:圓括號()表示表示式的結合。即指示 shell 不對後面的字元作特殊解釋,而留給 find 命令去解釋其意義。由於命令列不能直接使用圓括號,所以需要用反斜槓’\’進行轉意(即’\’轉意字元使命令列認識圓括號)。同時注意’(‘,’)’兩邊都需空格。
時間引數
atime:檔案最後一次被訪問的時間
ctime:改變檔案的屬性更新的時間
mtime:改變檔案內容時更新的時間
你想找出被改動的過的檔名使用命令:find ~ -mtime n
(~代表主工作目錄可以換成其他目錄,n代表天數,如下圖所示)
這裡寫圖片描述

其他命令選項:
-nogroup 查詢⽆無有效所屬組的⽂檔案,即該⽂檔案所屬的組在/
etc/groups中不存在。
-nouser 查詢⽆無有效屬主的⽂檔案,即該⽂檔案的屬主在/etc/
passwd中不存在。
-newer file1 ! file2 查詢更改時間⽐比⽂檔案file1新但⽐文
件file2舊的⽂檔案。
-type d 目錄
-type b 塊裝置檔案
-type c 字元裝置檔案
-type p 管道檔案
-type l 符號連結檔案
-type f 普通檔案
-size nc 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組記
Linux ⽤用find命令查詢⽂檔案大小為XX的檔案的辦法:
例如:⼀一個⽂檔案5556位元組,可以這樣寫
find /root -size -5557c -size +5555c -exec ls -ld {} \;
即查詢⼤大於5555位元組⼩小於5557位元組的⽂檔案,以上查詢的是/root目錄。
find /root -size -500K -size +50K -exec ls -ld {} \;
查詢 小於500K,大於50K的⽂檔案。
-mount 在查詢檔案時不跨越檔案系統的mount點。
-follow 如果find命令遇到符號連結檔案,就跟蹤至連結所指向的檔案。
-fstype 在查詢位於某一檔案系統中的檔案,這些檔案系統型別通常可以在配置檔案/etc/fstab中找到,改配置檔案中包含了本系統中有關檔案系統的資訊。