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的選項理解起來並不難,所以對比這選項也能夠寫出語句來.