查詢檔案【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 的檔案系統的假設,來優化它的搜尋。