linux(6)

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 命令會展示系統對某個文件及其屬性所知道的所有信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章