1. 程式人生 > >查找文件【TLCL】

查找文件【TLCL】

mtime command num quit ted -name 目錄 提示 pre

  • 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 的文件系統的假設,來優化它的搜索。

查找文件【TLCL】