1. 程式人生 > >查詢檔案【TLCL】

查詢檔案【TLCL】

  • locate

locate 執行快速的路徑名資料庫搜尋,輸出每個與指定子字串相匹配的路徑名。

locate bin/zip

locate 命令的資料庫是updatedb命令建立的。

  • find

locate只能依據檔名查詢檔案,而find命令能基於各種各樣的屬性 搜尋一個給定目錄(以及它的子目錄),來查詢檔案.

 

find ~            find 命令接收一個或多個目錄名來執行搜尋

find ~ -type d         -type d 限制了只搜尋目錄

 

find 命令支援的常見檔案型別測試條件:

b  塊特殊裝置檔案

c  字元特殊裝置檔案

d  目錄

f  普通檔案

l  符號連結

 

find ~ -type f -name "*.JPG" -size +1M | wc -l

-name後面跟萬用字元模式,根據檔名來搜尋。

-size根據檔案大小來搜尋,+表示大於指定數的檔案,-表示小於指定數的檔案,沒有則精確匹配這個數。

b 512 byte blocks【預設】

c bytes

w two byte words

k Kilobytes

M Megabytes

G Gigabytes

需要數值引數的 =情況下,可以應用以上“+”和“-”符號表示法。

 

-cmin n          匹配 【內容和屬性】修改時間在n分鐘前的檔案和目錄【“+”和“-”符號表示法】

-ctime n          匹配 【內容和屬性】修改時間在n*24小時前的檔案和目錄【“+”和“-”符號表示法】

-cnewer file         匹配 【內容或屬性】的最後修改時間晚於file的檔案和目錄

-mmin n          匹配 【內容】修改時間在n分鐘前的檔案和目錄【“+”和“-”符號表示法】

-mtime n          匹配 【內容】修改時間在n*24小時前的檔案和目錄【“+”和“-”符號表示法】

-newer file          匹配 【內容】的最後修改時間晚於file的檔案和目錄

 

-user name          匹配 屬於一個使用者的檔案和目錄【使用者名稱或使用者ID來表示】

-group name          匹配 屬於一個組的檔案和目錄【組名或組ID來表示】

-nouser            匹配 不屬於一個有效使用者的檔案和目錄

-nogroup           匹配 不屬於一個有效的組的檔案和目錄

 

-iname pattern         跟-name相似,但不區分大小寫。

-name pattern         用指定的萬用字元模式匹配的檔案和目錄。

-inum n            匹配inode號是n的檔案。這對於找到某個特殊 inode 的所有硬連結很有幫助。

-samefile name        類似於-inum 測試條件。匹配和檔案 name 享有同樣 inode 號的檔案。

 

-size n            匹配大小為n的檔案

-empty            匹配 空檔案和目錄

-perm mode          匹配許可權已經設定為指定的 mode的檔案或目錄【八進位制或符號表示法】

-type c             匹配檔案型別是 c 的檔案

 

  • 操作符

-and/-a            兩邊的測試條件都是真【預設】

-or              兩邊的任一個測試條件為真

-not              Match if the test following the operator is false.

()                這用來控制邏輯計算的優先順序,預設從左到右的順序計算。

 

find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

 

expr1 -operator expr2

所有情況下,expr1總會執行,expr2要根據expr1的執行結果

expr1 的結果 操作符 expr2 is...
-and 總要執行
-and 從不執行
-or 從不執行
-or 總要執行
  • 預定義操作

-delete          刪除當前匹配的檔案

-ls            執行ls -dils命令,將結果輸出到標準輸出

-print           把匹配檔案的全路徑名輸送到標準輸出【預設】

-quit            一旦找到一個,退出

-exec command {} ;    {}是當前路徑名的符號表示,分號是必要的分隔符表明命令的結束

-ok command {} ;     執行每個指定的命令之前, 會提示使用者

花括號和分號對於 shell 有特殊含義,所以它們必須被引起來或被轉義。

 

 

find ~ -type f -name '*.BAK' -delete  【用-print操作替換-delete,確認結果】
find ~ -type f -name 'foo*' -exec ls -l '{}' ';'

find ~ -type f -name 'foo*' -exec ls -l '{}'
+ 【把末尾的分號改為+,把搜尋結果結合為一個引數列表。】


xargs 命令從標準輸入接受輸入,並把輸入轉換為一個特定命令的引數列表。
find ~ -type f -name 'foo*' -print | xargs ls -l

 

古怪名字處理方法:

find ~ -iname ‘*.jpg’ -print0 | xargs –null ls -l

使用這項技術,我們可以保證所有檔案,甚至那些檔名中包含空格的檔案,都能被正確地處理。

 

 其他選項

-depth            先處理目錄中的檔案,再處理目錄自身。

-maxdepth levels        進入目錄樹的最大深度

-mindepth levels        進入目錄樹的最小深度

-mount            指示find不要搜尋掛載到其他檔案系統上的目錄

-noleaf            指示 find 程式不要基於自己在搜尋 Unix 的檔案系統的假設,來優化它的搜尋。