查找文件【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 的文件系統的假設,來優化它的搜索。
查找文件【TLCL】