開發人員需要熟知的常用Linux命令之五:Find

來源:互聯網
上載者:User

 本篇中我們將重點介紹三個常用工具的使用:Find、VI、Scp

Find命令是一個非常有效工具,它可以遍曆目前的目錄甚至於整個檔案系統來尋找某些檔案或目錄。
Find命令的一般形式為:
find pathname -options [-print -exec -ok]
讓我們來看看該命令的參數:

參數 描述
pathname find命令所尋找的目錄路徑。例如用.來表示目前的目錄,用/來表示系統根目錄。 
-print find命令將匹配的檔案輸出到標準輸出。
-exec find命令對匹配的檔案執行該參數所給出的shell命令。相應命令的形式為command {} /;,注意{ }和/;之間的空格。
-ok 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。

 

options最常見選項:

option 描述
-name 按照檔案名稱尋找檔案
-perm 按照檔案許可權來尋找檔案
-user 按照檔案屬主來尋找檔案
-group 按照檔案所屬的組來尋找檔案
-mtime -n +n 按照檔案的更改時間來尋找檔案,-n表示檔案更改時間距現在n天以內,+n 表示檔案更改時間距現在n天以前。Find命令還有-atime和-ctime選項,但它們都和-mtime選項相似,所以我們在這裡只介紹-mtime選項
-type 尋找某一類型的檔案,比如:b - 塊裝置檔案;d - 目錄;c - 字元裝置檔案;p - 管道檔案;l - 符號連結檔案;f - 普通檔案
-size n[c] 尋找檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計

 

以下是一些常見執行個體:

命令 描述
find . -name "*.txt" -print 在目前的目錄及子目錄中尋找所有的'*.txt'檔案
find . -name "[A-Z]*" -print 目前的目錄及子目錄中尋找檔案名稱以一個大寫字母開頭的檔案
find /etc -name "host*" -print 在/etc目錄中尋找檔案名稱以host開頭的檔案
find . -name "[a-z][a-z][0--9][0--9].txt" -print 在目前的目錄尋找檔案名稱以兩個小寫字母開頭,跟著是兩個數字,最後是*.txt的檔案
find . -size +1000000c -print 在目前的目錄下尋找檔案長度大於1 M位元組的檔案

 

 

使用exec或ok來執行shell命令
當匹配到一些檔案以後,可能希望對其進行某些操作,這時就可以使用-exec選項。一旦find命令匹配到了相應的檔案,就可以用-exec選項中的命令對其進行操作(在有些作業系統中只允許-exec選項執行諸如ls或ls -l這樣的命令)。大多數使用者使用這一選項是為了尋找舊檔案並刪除它們。這裡我強烈地建議你在真正執行rm命令刪除檔案之前,最好先用ls命令看一下,確認它們是所要刪除的檔案。
exec選項後面跟隨著所要執行的命令,然後是一對兒{ },一個空格和一個/,最後是一個分號

 

用xargs代替exec/ok
在使用find命令的-exec選項處理匹配到的檔案時,find命令將所有匹配到的檔案一起傳遞給exec執行。不幸的是,有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現溢出錯誤。錯誤資訊通常是"參數列太長"或"參數列溢出"。這就是xargs命令的用處所在,特別是與find命令一起使用。find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只擷取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先擷取的一部分檔案,然後是下一批,並如此繼續下去。在有些系統中,使用-exec選項會為處理每一個匹配到的檔案而發起一個相應的進程,並非將匹配到的檔案全部作為參數一次執行;這樣在有些情況下就會出現進程過多,系統效能下降的問題,因而效率不高;而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次擷取所有的參數,還是分批取得參數,以及每一次擷取參數的數目都會根據該命令的選項及系統核心中相應的可調參數來確定。

 

以下是一些exec/ok/xargs使用的常見執行個體:

命令 描述
find logs -type f -mtime +5 -exec rm {} /; 在/logs目錄中尋找更改時間在5日以前的檔案並刪除它們
find / -type f -size 0 -exec ls -l {} /; 系統中所有檔案長度為0的普通檔案,並列出它們的完整路徑
find /var/logs -type f -mtime +7 -exec rm {} /; 尋找/var/logs目錄中更改時間在7日以前的普通檔案,並刪除它們
find . -name "core" -print | xargs echo "" >/tmp/core.log 在整個系統中尋找記憶體資訊轉儲檔案(core dump) ,然後把結果儲存到/tmp/core.log 檔案中
find / -type f -print | xargs grep "device" 用grep命令在所有的普通檔案中搜尋device這個詞

記住,在shell中用任何方式刪除檔案之前,應當先查看相應的檔案,一定要小心!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.