1.locate - 查找文件的簡單方法
速搜索路徑名數據庫,並且輸出每個與給定字符串相匹配的文件名
$ locate bin/zip
$ locate zip | grep bin
2.find - 查找文件的複雜方式
-cmin n 匹配的文件和目錄的內容或屬性最後修改時間正好在 n 分鐘之前。指定少於 n 分鐘之前,使用-n,指定多於 n 分鐘之前,使用 +n。
-cnewer file 匹配的文件和目錄的內容或屬性最後修改時間早於那些文件。
-ctime n 匹配的文件和目錄的內容和屬性最後修改時間在 n*24 小時之前。
-empty 匹配空文件和目錄。
-group name 匹配的文件和目錄屬於一個組。組可以用組名或組 ID 來表示。
-iname pattern 就像 -name 測試條件,但是不區分大小寫。
-inum n 匹配的文件的 inode 號是 n。這對於找到某個特殊 inode 的所有硬鏈接很有幫助。
-mmin n 匹配的文件或目錄的內容被修改於 n 分鐘之前。
-mtime n 匹配的文件或目錄的內容被修改於 n*24 小時之前。
-name pattern 用指定的通配符模式匹配的文件和目錄。
-newer file 匹配的文件和目錄的內容早於指定的文件。當編寫 shell 腳本,做文件備份時,非常有幫助。每次你製作一個備份,更新文件(比如說日誌),然後使用 find 命令來決定自從上次更新,哪一個文件已經更改了。
-nouser 匹配的文件和目錄不屬於一個有效用戶。這可以用來查找屬於刪除帳戶的文件或監測攻擊行爲。
-nogroup 匹配的文件和目錄不屬於一個有效的組。
-perm mode 匹配的文件和目錄的權限已經設置爲指定的 mode。mode可以用八進制或符號表示法。
-samefile name 相似於 -inum 測試條件。匹配和文件 name 享有同樣 inode號的文件。
-size n 匹配的文件大小爲 n。
-type c 匹配的文件類型是 c。
-user name 匹配的文件或目錄屬於某個用戶。這個用戶可以通過用戶名或用戶 ID 來表示。
例子:
1. -type
b 塊設備文件
c 字符設備文件
d 目錄
f 普通文件
l 符號鏈接
2. -size
b 512 個字節塊。如果沒有指定單位,則這是默認值。
c 字節
w 兩個字節的字
k 千字節 (1024 個字節單位)
M 兆字節 (1048576 個字節單位)
G 千兆字節 (1073741824 個字節單位)
$ find ~ -type f -name "\*.JPG" -size +1M | wc -l
3.操作符
-and 如果操作符兩邊的測試條件都是真,則匹配。可以簡寫爲-a。注意若沒有使用操作符,則默認使用 -and。
-or 若操作符兩邊的任一個測試條件爲真,則匹配。可以簡寫爲-o。
-not 若操作符後面的測試條件是真,則匹配。可以簡寫爲一個感嘆號(!)。
() 把測試條件和操作符組合起來形成更大的表達式。
$ find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
4.預定義的操作
delete 刪除當前匹配的文件。
-ls 對匹配的文件執行等同的 ls -dils 命令。並將結果發送到標準輸出。
-print 把匹配文件的全路徑名輸送到標準輸出。如果沒有指定其它操作,這是默認操作。
-quit 一旦找到一個匹配,退出。
find ~ -type f -name '*.BAK' -delete
5.用戶定義的行爲
-exec 行爲
- -exec command {} ;
command 就是指一個命令的名字, {} 是當前路徑名的符號表示,分號是要求的界定符表明命令結束
-ok 行爲來代替 -exec,在執行每個指定的命令之前,會提示用戶
find ~ -type f -name 'foo*' -ok ls -l '{}' ';'
< ls ... /home/me/bin/foo > ? y
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
< ls ... /home/me/foo.txt > ? y
-rw-r--r-- 1 me me 0 2008-09-19 12:53 /home/me/foo.txt
-xargs
從標準輸入接受輸入,並把輸入轉換爲一個特定命令的參數列表
find ~ -type f -name 'foo\*' -print | xargs ls -l
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
-rw-r--r-- 1 me me 0 2008-09-19 12:53 /home/me/foo.txt
6.touch – 更新文件時間
$ find playground -type f -name 'file-B' -exec touch '{}' ';'
注:stat,是一款加大馬力的 ls 命令版本。這個 stat 命令會展示系統對某個文件及其屬性所知道的所有信息