標籤:shell linux find
find命令,像cd一樣常用.不過可能大多數時間只要那麼一兩個參數就足夠使用了.或者說,勉強夠用了.但是當我們主動的去翻看一下find的手冊,會發現原來更實用的功能都沒有用到.
本文結合自己的使用對find進行簡單的介紹.不保證全面,僅列出我在使用中受益頗多的選項.
find dir [option] 指定當前的一個目錄進行尋找.
option可以省略,如果省略的話,find會遞迴的列出目前的目錄下的所有檔案.
常用的option有很多,僅列出常用的一部分:
-name 指定檔案名稱,可以使用萬用字元,如果使用萬用字元的話,需要用雙引號擴起來.
-type 指定檔案的類型,可選的類型包括普通檔案f 目錄檔案d 符號檔案l 字元裝置c 塊裝置b等.
-size 後面可以接+-N 接+N表示超出N指定大小的檔案,-N表示小於N指定的大小.
-newer file 列出目前的目錄以及子目錄中,新於指定file檔案的
-mtime +-N 和size選項類似,+N表示修改時間老於指定的N*24消失.-N表示修改時間新於N*24消失.
-ctime +-N 同上,不過表示的是檔案的狀態改變的時間,注意find並沒有所謂的按建立時間尋找
-atime +-N 同上,尋找的基準是訪問的時間.
-maxdepth 最大目錄深度.指定了這個選項,可以避免find無止境的去遍曆子目錄.
-depth 這個選項的意思是處理完一個目錄,再去遍曆子目錄.
-and 用於條件,可以指定多個條件,返回的結果是滿足所有條件的檔案
-or 同上,不過返回的是滿足條件之一的即可.
! 放在選項前面,後面可以看到他的用法.用來指定不滿足條件的檔案.
-exec command [option] {} \; 非互動式執行命令,即將find找到的所有檔案執行command.注意{}和\之間的空格.
-ok command [option] {] \; 互動式執行命令,將find找出來的檔案執行command,但是會提示是否確認.
-delete 將尋找出來的檔案都刪除.
以上應該就可以應付大多數的情境了.之所以用find其實還有另外一個原因.是我不經意間發現的.當一個目錄下檔案較多的時候.可能你想這樣執行命令:ls "*.txt" | xargs cat
看似沒有問題的一條命令,卻會發生錯誤.原因是檔案太多了.無法用這個命令,這個時候find也會派上用場.想必find肯定有不一樣的地方吧.
來看看find在實際中的應用吧.
1. 找出目前的目錄的普通非sh尾碼的檔案並執行cat
2. 列出非sh和txt尾碼的檔案
上面列舉了兩種可能的寫法.注意!和選項之間一定要有空格,否則會報錯.注意前後小括弧與選項之間也要有空格,否則也會報錯.
小括弧的作用可能現在體現的不是很明顯.我一時也想不到具體的例子了.總之就是如果沒有小括弧,有一種情境,多個條件做過濾並且使用-exec選項的時候,-exec選項後面的command僅僅執行最後一個指定選項過濾出來的檔案.額,我遇到過這個問題.但是卻想不出來情境了.慚愧.
3. 列出當前檔案加下大於某個大小的檔案
需要注意的是,當沒有指定單位的時候,size後面的數位單位是512byte的一個塊.所以不要想當然的認為是位元組.
大致find的用法就總結這麼多.肯定有很多不全面的,好在find的選項理解起來並不難,所以對照這選項也可以寫出語句來.
8 shell命令之find